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

A collection (stored as an array) of FArrayBox objects. More...

#include <AMReX_MultiFab.H>

Inheritance diagram for amrex::MultiFab:
amrex::FabArray< FArrayBox > amrex::FabArrayBase

Public Member Functions

 MultiFab () noexcept
 Constructs an empty MultiFab.
 MultiFab (Arena *a) noexcept
 Constructs an empty MultiFab.
 MultiFab (const BoxArray &bxs, const DistributionMapping &dm, int ncomp, int ngrow, const MFInfo &info=MFInfo(), const FabFactory< FArrayBox > &factory=FArrayBoxFactory())
 Constructs a MultiFab.
 MultiFab (const BoxArray &bxs, const DistributionMapping &dm, int ncomp, const IntVect &ngrow, const MFInfo &info=MFInfo(), const FabFactory< FArrayBox > &factory=FArrayBoxFactory())
 MultiFab (const MultiFab &rhs, MakeType maketype, int scomp, int ncomp)
 Make an alias MultiFab.
 ~MultiFab ()
 MultiFab (MultiFab &&rhs) noexcept
MultiFab & operator= (MultiFab &&rhs) noexcept=default
 MultiFab (const MultiFab &rhs)=delete
MultiFab & operator= (const MultiFab &rhs)=delete
void define (const BoxArray &bxs, const DistributionMapping &dm, int nvar, int ngrow, const MFInfo &info=MFInfo(), const FabFactory< FArrayBox > &factory=FArrayBoxFactory())
void define (const BoxArray &bxs, const DistributionMapping &dm, int nvar, const IntVect &ngrow, const MFInfo &info=MFInfo(), const FabFactory< FArrayBox > &factory=FArrayBoxFactory())
MultiFab & operator= (Real r)
Real min (int comp, int nghost=0, bool local=false) const
 Returns the minimum value contained in component comp of the MultiFab.
Real min (const Box &region, int comp, int nghost=0, bool local=false) const
 Identical to min() function, but confines its search to intersection of Box b and the MultiFab.
Real max (int comp, int nghost=0, bool local=false) const
 Returns the maximum value contained in component comp of the MultiFab.
Real 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 MultiFab.
Real norm0 (int comp=0, int nghost=0, bool local=false, bool ignore_covered=false) const
 Returns the maximum absolute value contained in component comp of the MultiFab.
Real norminf (int comp=0, int nghost=0, bool local=false, bool ignore_covered=false) const
Real norm0 (const iMultiFab &mask, int comp=0, int nghost=0, bool local=false) const
 Returns the maximum absolute value inside the region where mask is non-zero.
Real norminf (const iMultiFab &mask, int comp=0, int nghost=0, bool local=false) const
Real norm0 (int comp, int ncomp, IntVect const &nghost, bool local=false, bool ignore_covered=false) const
 Returns the maximum absolute value across ncomp components.
Vector< Real > norm0 (const Vector< int > &comps, int nghost=0, bool local=false, bool ignore_covered=false) const
 Returns the maximum absolute values contained in each component of comps of the MultiFab. nghost ghost cells are used.
Vector< Real > norminf (const Vector< int > &comps, int nghost=0, bool local=false, bool ignore_covered=false) const
Real norm1 (int comp, const Periodicity &period, bool ignore_covered=false) const
 Returns the L1 norm of component comp over the MultiFab.
Real norm1 (int comp=0, int ngrow=0, bool local=false) const
 Returns the L1 norm of component comp over the MultiFab. ngrow ghost cells are used.
Vector< Real > norm1 (const Vector< int > &comps, int ngrow=0, bool local=false) const
 Returns the L1 norm of each component of "comps" over the MultiFab. ngrow ghost cells are used.
Real norm2 (int comp=0) const
 Returns the L2 norm of component comp over the MultiFab. No ghost cells are used.
Real norm2 (int comp, int numcomp) const
 Returns the L2 norm of numcomp components starting from comp component over the MultiFab. No ghost cells are used.
Real norm2 (int comp, const Periodicity &period) const
 Returns the L2 norm of component comp over the MultiFab. No ghost cells are used. This version has no double counting for nodal data.
Vector< Real > norm2 (const Vector< int > &comps) const
 Returns the L2 norm of each component of "comps" over the MultiFab. No ghost cells are used.
Real sum (int comp=0, bool local=false) const
 Returns the sum of component "comp" over the MultiFab – no ghost cells are included.
Real 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.
Real sum_unique (int comp=0, bool local=false, const Periodicity &period=Periodicity::NonPeriodic()) const
 Same as sum with local =false, but for non-cell-centered data, this only adds non-unique points that are owned by multiple boxes once.
Real sum_unique (Box const &region, int comp=0, bool local=false) const
 Returns the unique sum of component "comp" in the given region. Non-unique points owned by multiple boxes in the MultiFab are only added once. No ghost cells are included. This function does not take periodicity into account in the determination of uniqueness of points.
void plus (Real 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 MultiFab.
void plus (Real 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 (Real val, int nghost)
 Adds the scalar value val to the value of each cell in the valid region of each component of the MultiFab. The value of nghost specifies the number of cells in the boundary region that should be modified.
void plus (Real 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 MultiFab, that also intersects the Box region. The value of nghost specifies the number of cells in the boundary region of each FArrayBox in the subregion that should be modified.
void mult (Real val, int comp, int num_comp, int nghost=0)
 Scales the value of each cell in the specified subregion of the MultiFab 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 FArrayBox in the subregion that should be modified.
void mult (Real 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 FArrayBox in the subregion that should be modified.
void mult (Real val, int nghost=0)
 Scales the value of each cell in the valid region of each component of the MultiFab 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 (Real val, const Box &region, int nghost=0)
 Scales the value of each cell in the valid region of each component of the MultiFab 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 FArrayBox in the subregion that should be modified.
void invert (Real numerator, int comp, int num_comp, int nghost=0)
 Replaces the value of each cell in the specified subregion of the MultiFab with its reciprocal multiplied by the value of numerator. 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 FArrayBox in the subregion that should be modified.
void invert (Real numerator, const Box &region, int comp, int num_comp, int nghost=0)
 Identical to the previous version of invert(), 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 FArrayBox in the subregion that should be modified.
void invert (Real numerator, int nghost)
 Replaces the value of each cell in the specified subregion of the MultiFab with its reciprocal multiplied by the value of numerator. The value of nghost specifies the number of cells in the boundary region that should be modified.
void invert (Real numerator, const Box &region, int nghost)
 Replaces the value of each cell in the specified subregion of the MultiFab, that also intersects the Box region, with its reciprocal multiplied by the value of numerator. The value of nghost specifies the number of cells in the boundary region of each FArrayBox 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 MultiFab. 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 FArrayBox 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 MultiFab. 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 MultiFab 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 MultiFab &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 MultiFab. mf is required to have the same BoxArray or "valid region" as this MultiFab. 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 FArrayBox will be modified.
void minus (const MultiFab &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 MultiFab. mf is required to have the same BoxArray or "valid region" as this MultiFab. 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 FArrayBox will be modified.
void divide (const MultiFab &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 MultiFab. mf is required to have the same BoxArray or "valid region" as this MultiFab. 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 FArrayBox will be modified. Note, nothing is done to protect against divide by zero.
MultiFab deepCopy () const
bool is_finite (bool local=false) const
 Are the numbers in the MF finite (i.e., neither nan nor inf)? This may return true, even if the MF contains NaNs or Infs, if the machine doesn't support the appropriate NaN and Inf testing functions.
bool is_finite (int scomp, int ncomp, int ngrow=0, bool local=false) const
bool is_finite (int scomp, int ncomp, const IntVect &ngrow, bool local=false) const
bool contains_nan (bool local=false) const
 Are there any NaNs in the MF? This may return false, even if the MF contains NaNs, if the machine doesn't support the appropriate NaN testing functions.
bool contains_nan (int scomp, int ncomp, int ngrow=0, bool local=false) const
bool contains_nan (int scomp, int ncomp, const IntVect &ngrow, bool local=false) const
bool contains_inf (bool local=false) const
 Are there any Infs in the MF? This may return false, even if the MF contains Infs, if the machine doesn't support the appropriate Inf testing functions. This version checks all components and grow cells.
bool contains_inf (int scomp, int ncomp, int ngrow=0, bool local=false) const
bool contains_inf (int scomp, int ncomp, const IntVect &ngrow, bool local=false) const
std::unique_ptr< MultiFab > OverlapMask (const Periodicity &period=Periodicity::NonPeriodic()) const
 Return a mask indicating how many duplicates are in each point.
std::unique_ptr< iMultiFab > OwnerMask (const Periodicity &period=Periodicity::NonPeriodic()) const
 Owner is the grid with the lowest grid number containing the data.
void AverageSync (const Periodicity &period=Periodicity::NonPeriodic())
 Sync up nodal data via averaging.
void WeightedSync (const MultiFab &wgt, const Periodicity &period=Periodicity::NonPeriodic())
 Sync up nodal data with weights.
void OverrideSync (const iMultiFab &msk, const Periodicity &period=Periodicity::NonPeriodic())
 Synchronize nodal data. The synchronization will override valid regions by the intersecting valid regions with a higher precedence, according to the owner mask provided as input.
Public Member Functions inherited from amrex::FabArray< FArrayBox >
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< FArrayBox > 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< FArrayBox > &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< FArrayBox > 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< FArrayBox > &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< FArrayBox > & operator= (FabArray< FArrayBox > &&rhs) noexcept
void define (const BoxArray &bxs, const DistributionMapping &dm, int nvar, int ngrow, const MFInfo &info=MFInfo(), const FabFactory< FArrayBox > &factory=DefaultFabFactory< FArrayBox >())
 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< FArrayBox > & 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 FArrayBox & operator[] (const MFIter &mfi) const noexcept
 Return a constant reference to the FAB associated with mfi.
const FArrayBox & get (const MFIter &mfi) const noexcept
 Return a constant reference to the FAB associated with mfi.
FArrayBox & atLocalIdx (int L) noexcept
 Return a reference to the FAB associated with local index L.
FArrayBox * 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< FArrayBox >::value_type const > array (const MFIter &mfi) const noexcept
 Read-only Array4 view for the FAB referenced by iterator mfi.
Array4< typename FabArray< FArrayBox >::value_type const > const_array (const MFIter &mfi) const noexcept
 Synonym for array(const MFIter&) that highlights read-only semantics.
MultiArray4< typename FabArray< FArrayBox >::value_type > arrays () noexcept
 Build, if needed, and return mutable Array4 views for local FABs.
MultiArray4< typename FabArray< FArrayBox >::value_type const > const_arrays () const noexcept
 Read-only convenience wrapper equivalent to arrays() const.
void setFab (int boxno, std::unique_ptr< FArrayBox > elem)
 Explicitly set the Kth FAB in the FabArray to point to elem.
FArrayBox * 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< FArrayBox > 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< FArrayBox > &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< FArrayBox > &src, const Periodicity &period=Periodicity::NonPeriodic(), CpOp op=FabArrayBase::COPY)
void copy (const FabArray< FArrayBox > &src, const Periodicity &period=Periodicity::NonPeriodic(), CpOp op=FabArrayBase::COPY)
void ParallelAdd_nowait (const FabArray< FArrayBox > &src, const Periodicity &period=Periodicity::NonPeriodic())
 Start an asynchronous ParallelAdd over all components.
void ParallelCopy_nowait (const FabArray< FArrayBox > &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< FArrayBox > &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< FArrayBox > &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< FArrayBox > &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 (FArrayBox &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< FArrayBox > 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< FArrayBox > 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 Real Dot (const MultiFab &x, int xcomp, const MultiFab &y, int ycomp, int numcomp, int nghost, bool local=false)
 Returns the dot product of two MultiFabs.
static Real Dot (const MultiFab &x, int xcomp, int numcomp, int nghost, bool local=false)
 Returns the dot product of a MultiFab with itself.
static Real Dot (const iMultiFab &mask, const MultiFab &x, int xcomp, const MultiFab &y, int ycomp, int numcomp, int nghost, bool local=false)
static void Add (MultiFab &dst, const MultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
 Add src to dst including nghost ghost cells. The two MultiFabs MUST have the same underlying BoxArray.
static void Add (MultiFab &dst, const MultiFab &src, int srccomp, int dstcomp, int numcomp, const IntVect &nghost)
static void Copy (MultiFab &dst, const MultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
 Copy from src to dst including nghost ghost cells. The two MultiFabs MUST have the same underlying BoxArray. The copy is local. The parallel copy function is in FabArray.H.
static void Copy (MultiFab &dst, const MultiFab &src, int srccomp, int dstcomp, int numcomp, const IntVect &nghost)
static void Swap (MultiFab &dst, MultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
 Swap from src to dst including nghost ghost cells. The two MultiFabs MUST have the same underlying BoxArray. The swap is local.
static void Swap (MultiFab &dst, MultiFab &src, int srccomp, int dstcomp, int numcomp, const IntVect &nghost)
static void Subtract (MultiFab &dst, const MultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
 Subtract src from dst including nghost ghost cells. The two MultiFabs MUST have the same underlying BoxArray.
static void Subtract (MultiFab &dst, const MultiFab &src, int srccomp, int dstcomp, int numcomp, const IntVect &nghost)
static void Multiply (MultiFab &dst, const MultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
 Multiply dst by src including nghost ghost cells. The two MultiFabs MUST have the same underlying BoxArray.
static void Multiply (MultiFab &dst, const MultiFab &src, int srccomp, int dstcomp, int numcomp, const IntVect &nghost)
static void Divide (MultiFab &dst, const MultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
 Divide dst by src including nghost ghost cells. The two MultiFabs MUST have the same underlying BoxArray.
static void Divide (MultiFab &dst, const MultiFab &src, int srccomp, int dstcomp, int numcomp, const IntVect &nghost)
static void Saxpy (MultiFab &dst, Real a, const MultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
 dst += a*src
static void Xpay (MultiFab &dst, Real a, const MultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
 dst = src + a*dst
static void LinComb (MultiFab &dst, Real a, const MultiFab &x, int xcomp, Real b, const MultiFab &y, int ycomp, int dstcomp, int numcomp, int nghost)
 dst = a*x + b*y
static void AddProduct (MultiFab &dst, const MultiFab &src1, int comp1, const MultiFab &src2, int comp2, int dstcomp, int numcomp, int nghost)
 dst += src1*src2
static void AddProduct (MultiFab &dst, const MultiFab &src1, int comp1, const MultiFab &src2, int comp2, int dstcomp, int numcomp, const IntVect &nghost)
static void Initialize ()
static void Finalize ()
Static Public Member Functions inherited from amrex::FabArray< FArrayBox >
static void Saxpy (FabArray< FArrayBox > &y, value_type a, FabArray< FArrayBox > const &x, int xcomp, int ycomp, int ncomp, IntVect const &nghost)
 y += a*x
static void Xpay (FabArray< FArrayBox > &y, value_type a, FabArray< FArrayBox > const &x, int xcomp, int ycomp, int ncomp, IntVect const &nghost)
 y = x + a*y
static void LinComb (FabArray< FArrayBox > &dst, value_type a, const FabArray< FArrayBox > &x, int xcomp, value_type b, const FabArray< FArrayBox > &y, int ycomp, int dstcomp, int numcomp, const IntVect &nghost)
 dst = a*x + b*y
static void Saxpy_Xpay (FabArray< FArrayBox > &y, value_type a1, FabArray< FArrayBox > const &x1, value_type a2, FabArray< FArrayBox > const &x2, int xcomp, int ycomp, int ncomp, IntVect const &nghost)
 y = x2+a2*(y+a1*x1)
static void Saxpy_Saxpy (FabArray< FArrayBox > &y1, value_type a1, FabArray< FArrayBox > const &x1, FabArray< FArrayBox > &y2, value_type a2, FabArray< FArrayBox > const &x2, int xcomp, int ycomp, int ncomp, IntVect const &nghost)
 y1 += a1*x1; y2 += a2*x2;
static void Saypy_Saxpy (FabArray< FArrayBox > &y1, value_type a1, FabArray< FArrayBox > &y2, value_type a2, FabArray< FArrayBox > 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< FArrayBox >
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< FArrayBox >
std::unique_ptr< FBData< FArrayBox > > fbd
std::unique_ptr< PCData< FArrayBox > > pcd
std::unique_ptr< FabArray< FArrayBox > > 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< FArrayBox >
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< FArrayBox >
std::unique_ptr< FabFactory< FArrayBox > > 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< FArrayBox * > 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 (stored as an array) of FArrayBox objects.

This class is useful for storing floating point data on a domain defined by a union of rectangular regions embedded in a uniform index space. MultiFab class extends the function of the underlying FabArray class just as the FArrayBox class extends the function of BaseFab<Real>. 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

◆ MultiFab() [1/7]

amrex::MultiFab::MultiFab ( )
noexcept

Constructs an empty MultiFab.

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

◆ MultiFab() [2/7]

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

Constructs an empty MultiFab.

Data can be defined at a later time using the define member functions. 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.

◆ MultiFab() [3/7]

amrex::MultiFab::MultiFab ( const BoxArray & bxs,
const DistributionMapping & dm,
int ncomp,
int ngrow,
const MFInfo & info = MFInfo(),
const FabFactory< FArrayBox > & factory = FArrayBoxFactory() )

Constructs a MultiFab.

The size of the FArrayBox is given by the Box grown by ngrow, and the number of components is given by ncomp. If info is set to not allocating memory, then no FArrayBoxes are allocated at this time but can be defined later.

Parameters
bxsa valid region
dma DistributionMapping
ncompnumber of components
ngrownumber of cells the region grows
infoMFInfo
factoryFab factory

◆ MultiFab() [4/7]

amrex::MultiFab::MultiFab ( const BoxArray & bxs,
const DistributionMapping & dm,
int ncomp,
const IntVect & ngrow,
const MFInfo & info = MFInfo(),
const FabFactory< FArrayBox > & factory = FArrayBoxFactory() )

◆ MultiFab() [5/7]

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

Make an alias MultiFab.

Note that 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 MultiFab.

◆ ~MultiFab()

amrex::MultiFab::~MultiFab ( )

◆ MultiFab() [6/7]

amrex::MultiFab::MultiFab ( MultiFab && rhs)
noexcept

◆ MultiFab() [7/7]

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

Member Function Documentation

◆ Add() [1/2]

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

◆ Add() [2/2]

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

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

◆ AddProduct() [1/2]

void amrex::MultiFab::AddProduct ( MultiFab & dst,
const MultiFab & src1,
int comp1,
const MultiFab & src2,
int comp2,
int dstcomp,
int numcomp,
const IntVect & nghost )
static

◆ AddProduct() [2/2]

void amrex::MultiFab::AddProduct ( MultiFab & dst,
const MultiFab & src1,
int comp1,
const MultiFab & src2,
int comp2,
int dstcomp,
int numcomp,
int nghost )
static

dst += src1*src2

◆ AverageSync()

void amrex::MultiFab::AverageSync ( const Periodicity & period = Periodicity::NonPeriodic())

Sync up nodal data via averaging.

◆ contains_inf() [1/3]

bool amrex::MultiFab::contains_inf ( bool local = false) const
nodiscard

Are there any Infs in the MF? This may return false, even if the MF contains Infs, if the machine doesn't support the appropriate Inf testing functions. This version checks all components and grow cells.

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

◆ contains_inf() [2/3]

bool amrex::MultiFab::contains_inf ( int scomp,
int ncomp,
const IntVect & ngrow,
bool local = false ) const
nodiscard

◆ contains_inf() [3/3]

bool amrex::MultiFab::contains_inf ( int scomp,
int ncomp,
int ngrow = 0,
bool local = false ) const
nodiscard

◆ contains_nan() [1/3]

bool amrex::MultiFab::contains_nan ( bool local = false) const
nodiscard

Are there any NaNs in the MF? This may return false, even if the MF contains NaNs, if the machine doesn't support the appropriate NaN testing functions.

This version checks all components and grow cells.

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

◆ contains_nan() [2/3]

bool amrex::MultiFab::contains_nan ( int scomp,
int ncomp,
const IntVect & ngrow,
bool local = false ) const
nodiscard

◆ contains_nan() [3/3]

bool amrex::MultiFab::contains_nan ( int scomp,
int ncomp,
int ngrow = 0,
bool local = false ) const
nodiscard

◆ Copy() [1/2]

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

◆ Copy() [2/2]

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

Copy from src to dst including nghost ghost cells. The two MultiFabs MUST have the same underlying BoxArray. The copy is local. The parallel copy function is in FabArray.H.

◆ deepCopy()

MultiFab amrex::MultiFab::deepCopy ( ) const
nodiscard

Create a deep copy of this MultiFab and its data.

This uses the same arena and factory in the copy and copies all data.

◆ define() [1/2]

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

◆ define() [2/2]

void amrex::MultiFab::define ( const BoxArray & bxs,
const DistributionMapping & dm,
int nvar,
int ngrow,
const MFInfo & info = MFInfo(),
const FabFactory< FArrayBox > & factory = FArrayBoxFactory() )

◆ Divide() [1/2]

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

◆ Divide() [2/2]

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

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

◆ divide()

void amrex::MultiFab::divide ( const MultiFab & 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 MultiFab. mf is required to have the same BoxArray or "valid region" as this MultiFab. 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 FArrayBox will be modified. Note, nothing is done to protect against divide by zero.

◆ Finalize()

void amrex::MultiFab::Finalize ( )
static

◆ Initialize()

void amrex::MultiFab::Initialize ( )
static

◆ invert() [1/4]

void amrex::MultiFab::invert ( Real numerator,
const Box & region,
int comp,
int num_comp,
int nghost = 0 )

Identical to the previous version of invert(), 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 FArrayBox in the subregion that should be modified.

◆ invert() [2/4]

void amrex::MultiFab::invert ( Real numerator,
const Box & region,
int nghost )

Replaces the value of each cell in the specified subregion of the MultiFab, that also intersects the Box region, with its reciprocal multiplied by the value of numerator. The value of nghost specifies the number of cells in the boundary region of each FArrayBox in the subregion that should be modified.

◆ invert() [3/4]

void amrex::MultiFab::invert ( Real numerator,
int comp,
int num_comp,
int nghost = 0 )

Replaces the value of each cell in the specified subregion of the MultiFab with its reciprocal multiplied by the value of numerator. 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 FArrayBox in the subregion that should be modified.

◆ invert() [4/4]

void amrex::MultiFab::invert ( Real numerator,
int nghost )

Replaces the value of each cell in the specified subregion of the MultiFab with its reciprocal multiplied by the value of numerator. The value of nghost specifies the number of cells in the boundary region that should be modified.

◆ is_finite() [1/3]

bool amrex::MultiFab::is_finite ( bool local = false) const
nodiscard

Are the numbers in the MF finite (i.e., neither nan nor inf)? This may return true, even if the MF contains NaNs or Infs, if the machine doesn't support the appropriate NaN and Inf testing functions.

This version checks all components and grow cells.

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

◆ is_finite() [2/3]

bool amrex::MultiFab::is_finite ( int scomp,
int ncomp,
const IntVect & ngrow,
bool local = false ) const
nodiscard

◆ is_finite() [3/3]

bool amrex::MultiFab::is_finite ( int scomp,
int ncomp,
int ngrow = 0,
bool local = false ) const
nodiscard

◆ LinComb()

void amrex::MultiFab::LinComb ( MultiFab & dst,
Real a,
const MultiFab & x,
int xcomp,
Real b,
const MultiFab & y,
int ycomp,
int dstcomp,
int numcomp,
int nghost )
static

dst = a*x + b*y

◆ max() [1/2]

Real amrex::MultiFab::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 MultiFab.

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

◆ max() [2/2]

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

Returns the maximum value contained in component comp of the MultiFab.

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

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 FArrayBoxes.

If the MultiFab has an EB factory, covered cells are ignored.

◆ min() [1/2]

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

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

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

◆ min() [2/2]

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

Returns the minimum value contained in component comp of the MultiFab.

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

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 FArrayBoxes.

If the MultiFab has an EB factory, covered cells are ignored.

◆ minus()

void amrex::MultiFab::minus ( const MultiFab & 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 MultiFab. mf is required to have the same BoxArray or "valid region" as this MultiFab. 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 FArrayBox will be modified.

◆ mult() [1/4]

void amrex::MultiFab::mult ( Real 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 FArrayBox in the subregion that should be modified.

◆ mult() [2/4]

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

Scales the value of each cell in the valid region of each component of the MultiFab 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 FArrayBox in the subregion that should be modified.

◆ mult() [3/4]

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

Scales the value of each cell in the specified subregion of the MultiFab 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 FArrayBox in the subregion that should be modified.

◆ mult() [4/4]

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

Scales the value of each cell in the valid region of each component of the MultiFab 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.

◆ Multiply() [1/2]

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

◆ Multiply() [2/2]

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

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

◆ negate() [1/4]

void amrex::MultiFab::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.

◆ negate() [2/4]

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

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

◆ negate() [3/4]

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

Negates the value of each cell in the specified subregion of the MultiFab. 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 FArrayBox in the subregion that should be modified.

◆ negate() [4/4]

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

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

◆ norm0() [1/4]

Real amrex::MultiFab::norm0 ( const iMultiFab & mask,
int comp = 0,
int nghost = 0,
bool local = false ) const
nodiscard

Returns the maximum absolute value inside the region where mask is non-zero.

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

◆ norm0() [2/4]

Vector< Real > amrex::MultiFab::norm0 ( const Vector< int > & comps,
int nghost = 0,
bool local = false,
bool ignore_covered = false ) const
nodiscard

Returns the maximum absolute values contained in each component of comps of the MultiFab. nghost ghost cells are used.

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

◆ norm0() [3/4]

Real amrex::MultiFab::norm0 ( int comp,
int ncomp,
IntVect const & nghost,
bool local = false,
bool ignore_covered = false ) const
nodiscard

Returns the maximum absolute value across ncomp components.

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

◆ norm0() [4/4]

Real amrex::MultiFab::norm0 ( int comp = 0,
int nghost = 0,
bool local = false,
bool ignore_covered = false ) const
nodiscard

Returns the maximum absolute value contained in component comp of the MultiFab.

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

◆ norm1()

Real amrex::MultiFab::norm1 ( int comp,
const Periodicity & period,
bool ignore_covered = false ) const
nodiscard

Returns the L1 norm of component comp over the MultiFab.

No ghost cells are used. This version has no double counting for nodal data.

Warning
This routine performs an MPI collective, so every rank in the current active MPI communicator must participate.

◆ operator=() [1/3]

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

◆ operator=() [2/3]

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

◆ operator=() [3/3]

MultiFab & amrex::MultiFab::operator= ( Real r)

◆ OverlapMask()

std::unique_ptr< MultiFab > amrex::MultiFab::OverlapMask ( const Periodicity & period = Periodicity::NonPeriodic()) const
nodiscard

Return a mask indicating how many duplicates are in each point.

◆ OverrideSync()

void amrex::MultiFab::OverrideSync ( const iMultiFab & msk,
const Periodicity & period = Periodicity::NonPeriodic() )

Synchronize nodal data. The synchronization will override valid regions by the intersecting valid regions with a higher precedence, according to the owner mask provided as input.

Example: Suppose there is a valid point that is shared by 4 boxes. Some operation assigns values a, b, c, and d to the 4 points in the 4 boxes. We then call SumBoundary to add the 4 values and store the result in the 4 boxes. The value in box 0 might be the result of a+b+c+d, the value in box 1 might be the result of b+c+d+a, etc. The resulting data could be out of sync across boxes due to roundoff errors. OverrideSync synchronizes the data by overriding all values with one value (e.g., the value from box 0).

Parameters
mskowner mask
periodperiodic length if it's non-zero

◆ OwnerMask()

std::unique_ptr< iMultiFab > amrex::MultiFab::OwnerMask ( const Periodicity & period = Periodicity::NonPeriodic()) const
nodiscard

Owner is the grid with the lowest grid number containing the data.

◆ plus() [1/5]

void amrex::MultiFab::plus ( const MultiFab & 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 MultiFab. mf is required to have the same BoxArray or "valid region" as this MultiFab. 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 FArrayBox will be modified.

◆ plus() [2/5]

void amrex::MultiFab::plus ( Real 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.

◆ plus() [3/5]

void amrex::MultiFab::plus ( Real 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 MultiFab, that also intersects the Box region. The value of nghost specifies the number of cells in the boundary region of each FArrayBox in the subregion that should be modified.

◆ plus() [4/5]

void amrex::MultiFab::plus ( Real 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 MultiFab.

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 FArrayBox in the subregion that should be modified.

◆ plus() [5/5]

void amrex::MultiFab::plus ( Real val,
int nghost )

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

◆ Saxpy()

void amrex::MultiFab::Saxpy ( MultiFab & dst,
Real a,
const MultiFab & src,
int srccomp,
int dstcomp,
int numcomp,
int nghost )
static

dst += a*src

◆ Subtract() [1/2]

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

◆ Subtract() [2/2]

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

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

◆ sum_unique()

Real amrex::MultiFab::sum_unique ( Box const & region,
int comp = 0,
bool local = false ) const
nodiscard

Returns the unique sum of component "comp" in the given region. Non-unique points owned by multiple boxes in the MultiFab are only added once. No ghost cells are included. This function does not take periodicity into account in the determination of uniqueness of points.

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

◆ Swap() [1/2]

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

◆ Swap() [2/2]

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

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

◆ WeightedSync()

void amrex::MultiFab::WeightedSync ( const MultiFab & wgt,
const Periodicity & period = Periodicity::NonPeriodic() )

Sync up nodal data with weights.

◆ Xpay()

void amrex::MultiFab::Xpay ( MultiFab & dst,
Real a,
const MultiFab & src,
int srccomp,
int dstcomp,
int numcomp,
int nghost )
static

dst = src + a*dst


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