![]() |
Block-Structured AMR Software Framework
|
Base class for FabArray. More...
#include <AMReX_FabArrayBase.H>
Classes | |
| struct | BDKey |
| struct | CFinfo |
| coarse/fine boundary More... | |
| struct | CommMetaData |
| struct | CopyComTag |
| Used by a bunch of routines when communicating via MPI. More... | |
| struct | CPC |
| parallel copy or add More... | |
| struct | FabArrayStats |
| struct | FabComTag |
| Used for collecting information used in communicating FABs. More... | |
| struct | FB |
| FillBoundary. More... | |
| struct | FPinfo |
| struct | meminfo |
| struct | ParForInfo |
| For ParallelFor(FabArray) More... | |
| struct | PolarB |
| Fill polar boundary in spherical coordinates. More... | |
| struct | RB180 |
| Rotate Boundary by 180. More... | |
| struct | RB90 |
| Rotate Boundary by 90. More... | |
| struct | RegionTag |
| struct | TileArray |
| Tiling. More... | |
Public Types | |
| 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 Member Functions | |
| 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. | |
| 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 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 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. | |
Public Attributes | |
| 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 | |
| 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 |
Friends | |
| class | MFIter |
| template<class FAB > | |
| void | FillBoundary (Vector< FabArray< FAB > * > const &mf, const Periodicity &period) |
Base class for FabArray.
Not to be confused with FArrayBox or FAB shorthands. Can be read as FArrayBox-like Array Base.
| using amrex::FabArrayBase::CFinfoCache = std::multimap<BDKey,FabArrayBase::CFinfo*> |
| using amrex::FabArrayBase::CFinfoCacheIter = CFinfoCache::iterator |
| using amrex::FabArrayBase::CPCache = std::multimap<BDKey,FabArrayBase::CPC*> |
| using amrex::FabArrayBase::CPCacheIter = CPCache::iterator |
| using amrex::FabArrayBase::FBCache = std::multimap<BDKey,FabArrayBase::FB*> |
| using amrex::FabArrayBase::FBCacheIter = FBCache::iterator |
| using amrex::FabArrayBase::FPinfoCache = std::multimap<BDKey,FabArrayBase::FPinfo*> |
| using amrex::FabArrayBase::FPinfoCacheIter = FPinfoCache::iterator |
| using amrex::FabArrayBase::PolarBCache = std::multimap<BDKey,FabArrayBase::PolarB*> |
| using amrex::FabArrayBase::PolarBCacheIter = PolarBCache::iterator |
| using amrex::FabArrayBase::RB180Cache = std::multimap<BDKey,FabArrayBase::RB180*> |
| using amrex::FabArrayBase::RB180CacheIter = RB180Cache::iterator |
| using amrex::FabArrayBase::RB90Cache = std::multimap<BDKey,FabArrayBase::RB90*> |
| using amrex::FabArrayBase::RB90CacheIter = RB90Cache::iterator |
| using amrex::FabArrayBase::TACache = std::map<BDKey, TAMap> |
| using amrex::FabArrayBase::TAMap = std::map<std::pair<IntVect,IntVect>, TileArray> |
|
default |
|
default |
| amrex::FabArrayBase::FabArrayBase | ( | const BoxArray & | bxs, |
| const DistributionMapping & | dm, | ||
| int | nvar, | ||
| int | ngrow | ||
| ) |
| amrex::FabArrayBase::FabArrayBase | ( | const BoxArray & | bxs, |
| const DistributionMapping & | dm, | ||
| int | nvar, | ||
| const IntVect & | ngrow | ||
| ) |
|
defaultnoexcept |
|
default |
| void amrex::FabArrayBase::addThisBD | ( | ) |
add the current BD into BD count database
Return the Kth Box in the BoxArray. That is, the valid region of the Kth grid.
|
inlinenoexcept |
|
static |
| void amrex::FabArrayBase::clear | ( | ) |
Clear this object's BoxArray, DistributionMapping, local index/ownership data, and BDKey so the container can be redefined.
The communication-metadata caches (FillBoundary/ParallelCopy/etc.) are global and are not flushed here.
| void amrex::FabArrayBase::clearThisBD | ( | bool | no_assertion = false | ) | const |
clear BD count and caches associated with this BD, if no other is using this BD.
| void amrex::FabArrayBase::define | ( | const BoxArray & | bxs, |
| const DistributionMapping & | dm, | ||
| int | nvar, | ||
| const IntVect & | ngrow | ||
| ) |
| void amrex::FabArrayBase::define | ( | const BoxArray & | bxs, |
| const DistributionMapping & | dm, | ||
| int | nvar, | ||
| int | ngrow | ||
| ) |
| void amrex::FabArrayBase::define_fb_metadata | ( | CommMetaData & | cmd, |
| const IntVect & | nghost, | ||
| bool | cross, | ||
| const Periodicity & | period, | ||
| bool | multi_ghost | ||
| ) | const |
Populate communication metadata for FillBoundary-style operations.
| cmd | Reference to the metadata record that will own the tag arrays. |
| nghost | Grow vector describing the ghost region of interest. |
| cross | Whether to skip corner ghost cells. |
| period | Periodicity object defining wrapped intersections. |
| multi_ghost | Include overlapping ghost-node regions for grow widths greater than one. |
|
inlinenoexcept |
Return constant reference to associated DistributionMapping.
|
inlinenoexcept |
Return the Kth FABs Box in the FabArray. That is, the region the Kth fab is actually defined on.
|
static |
| void amrex::FabArrayBase::flushCFinfo | ( | bool | no_assertion = false | ) | const |
| void amrex::FabArrayBase::flushFPinfo | ( | bool | no_assertion = false | ) | const |
|
static |
| void amrex::FabArrayBase::flushParForInfo | ( | bool | no_assertion = false | ) | const |
| void amrex::FabArrayBase::flushPolarB | ( | bool | no_assertion = false | ) | const |
This flushes its own PolarB.
|
static |
This flushes the entire cache.
| void amrex::FabArrayBase::flushRB180 | ( | bool | no_assertion = false | ) | const |
This flushes its own RB180.
|
static |
This flushes the entire cache.
| void amrex::FabArrayBase::flushRB90 | ( | bool | no_assertion = false | ) | const |
This flushes its own RB90.
|
static |
This flushes the entire cache.
| void amrex::FabArrayBase::flushTileArray | ( | const IntVect & | tilesize = IntVect::TheZeroVector(), |
| bool | no_assertion = false |
||
| ) | const |
|
static |
This flushes the entire cache.
|
inlinestatic |
Query whether single-chunk allocation is enabled for new FabArrays.
|
inlinenoexcept |
| const FabArrayBase::CPC & amrex::FabArrayBase::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.
| dstng | Destination ghost cells included in the transfer. |
| src | Source FabArrayBase driving the exchange. |
| srcng | Source ghost cells included in the transfer. |
| period | Periodicity description honoring domain wrapping. |
| to_ghost_cells_only | Restrict transfers to destination ghost cells. |
| offset | Index offset pairing destination index iv with source index iv-offset, with periodic images included as specified by period. |
| const FabArrayBase::FB & amrex::FabArrayBase::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.
| nghost | Number of grow cells required. |
| period | Periodicity description honoring domain wrapping. |
| cross | Skip corner fills when true. |
| enforce_periodicity_only | Generate tags strictly for periodic exchanges. |
| override_sync | Use the override-sync tag pattern instead of the normal ghost-cell FillBoundary pattern. |
| sumboundary_src_nghost | Source grow vector; if every component is nonnegative, and neither enforce_periodicity_only nor override_sync is set, SumBoundary metadata is built. |
|
static |
Generate a monotonically increasing identifier for communication metadata objects.
| FabArrayBase::ParForInfo const & amrex::FabArrayBase::getParForInfo | ( | const IntVect & | nghost | ) | const |
Obtain metadata describing how to launch device ParallelFor over this FabArray.
| nghost | Grow vector describing which halo width will participate in the loop. |
| const FabArrayBase::PolarB & amrex::FabArrayBase::getPolarB | ( | const IntVect & | nghost, |
| const Box & | domain | ||
| ) | const |
Retrieve the spherical polar-boundary metadata used by NonLocalBC::FillPolar() for a given halo width and domain.
| const FabArrayBase::RB180 & amrex::FabArrayBase::getRB180 | ( | const IntVect & | nghost, |
| const Box & | domain | ||
| ) | const |
Retrieve the rotation-by-180 metadata used by NonLocalBC::Rotate180() for a given halo width and domain.
| const FabArrayBase::RB90 & amrex::FabArrayBase::getRB90 | ( | const IntVect & | nghost, |
| const Box & | domain | ||
| ) | const |
Retrieve the rotation-by-90 metadata used by NonLocalBC::Rotate90() for a given halo width and domain.
| const FabArrayBase::TileArray * amrex::FabArrayBase::getTileArray | ( | const IntVect & | tilesize | ) | const |
Return the cached tile decomposition used by MFIter.
The cache is keyed by this FabArrayBase BDKey plus the pair of requested tile size and BoxArray coarsening ratio. If no entry exists, this builds it on first use with buildTileArray() and records the use before returning.
It is not guaranteed that the all the tiles in the decomposition will be have exactly the input tile_size. Some of the tiles may be slightly larger. It is guaranteed, however, that the tiles associated with a given box will be non-overlapping.
IntVect::TheZeroVector() means untiled iteration: the TileArray has one tile per owned local FAB. Otherwise each owned local valid box is split by the requested tile size. The parallel vectors in TileArray provide the global FAB index, local FAB index, local tile index, number of tiles in that FAB, and the cell-centered tile boxes consumed by MFIter.
TileArray::tileArray always stores cell-centered boxes; MFIter converts them to the requested IndexType for tilebox(), growntilebox(), and related accessors. The returned pointer is owned by the static tile-array cache; treat it as immutable and do not keep it after the cache entry can be flushed.
Return constant reference to indices in the FabArray that we have access.
|
static |
Initialize from ParmParse with "fabarray" prefix.
|
noexcept |
This tests on whether the FabArray is cell-centered.
|
noexcept |
This tests on whether the FabArray is fully nodal.
|
noexcept |
This tests on whether the FabArray is nodal in direction dir.
|
noexcept |
Is this a good candidate for kernel fusing?
|
inlinenoexcept |
|
inlinenoexcept |
Return index type.
|
inlinenoexcept |
Return the number of local FABs in the FabArray.
Return local index in the vector of FABs.
|
inlinenoexcept |
Return number of variables (aka components) associated with each point.
Return the grow factor that defines the region of definition.
|
inlinenoexcept |
Return the halo width currently recorded as up to date.
|
inlinenoexcept |
|
default |
|
default |
|
inlinenoexcept |
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.
|
static |
Pop the most recent region tag. The tag stack must be nonempty.
|
static |
Print the tracked memory usage table on the current subcommunicator's I/O process.
|
static |
Push a memory-region tag used to classify subsequent FabArray allocations.
Tags form a process-wide stack, allowing nested regions.
|
static |
Overload accepting std::string.
|
static |
Query the currently-live bytes tracked under tag (defaults to the All tag).
|
static |
Query the recorded high-water mark tracked under tag (defaults to the All tag).
|
inline |
Record whether this FabArrayBase participates in multi-ghost exchanges.
For grow widths greater than one, multi-ghost mode includes overlapping ghost-node regions in FillBoundary metadata.
|
inlinenoexcept |
Update the bookkeeping on how many ghost cells are known to be valid.
| ng | Grow-vector describing the currently up-to-date halo width. |
|
static |
|
static |
| void amrex::FabArrayBase::updateBDKey | ( | ) |
Refresh the cached BDKey after rebinding BoxArray or DistributionMapping data.
|
static |
Accumulate memory usage statistics for diagnostics.
| tag | Subsystem identifier (e.g., "MultiFab scratch"). |
| nbytes | Signed byte change being accounted for. |
| ar | Reserved for arena-specific accounting; currently unused. |
|
friend |
|
friend |
|
mutable |
|
static |
communication tile size
To maximize thread efficiency we now can decompose things like intersections among boxes into smaller tiles. This sets their maximum size.
| DistributionMapping amrex::FabArrayBase::distributionMap |
|
static |
|
static |
Keep track of how many FabArrays are built with the same BDKey.
|
mutable |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
| bool amrex::FabArrayBase::m_multi_ghost = false |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
The maximum number of components to copy() at a time.
| int amrex::FabArrayBase::n_comp |
| IntVect amrex::FabArrayBase::n_filled |
| IntVect amrex::FabArrayBase::n_grow |
| std::vector<bool> amrex::FabArrayBase::ownership |