Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_FabArrayBase.H
Go to the documentation of this file.
1#ifndef BL_FABARRAYBASE_H_
2#define BL_FABARRAYBASE_H_
3#include <AMReX_Config.H>
4
5#include <AMReX_BoxArray.H>
10#include <AMReX_Periodicity.H>
11#include <AMReX_Print.H>
12#include <AMReX_Arena.H>
13#include <AMReX_Gpu.H>
14
20#ifdef AMREX_USE_OMP
21#include <omp.h>
22#endif
23
24#include <cstdint>
25#include <ostream>
26#include <string>
27#include <utility>
28
29
30namespace amrex {
31
32class MFIter;
33class Geometry;
34class FArrayBox;
35template <typename FAB> class FabFactory;
36template <typename FAB> class FabArray;
37
38namespace EB2 { class IndexSpace; }
39
47{
48 friend class MFIter;
49
50 template <class FAB> friend void FillBoundary (Vector<FabArray<FAB>*> const& mf, const Periodicity& period);
51
52public:
53
54 FabArrayBase () = default;
55 ~FabArrayBase () = default;
56
57 FabArrayBase (const BoxArray& bxs,
58 const DistributionMapping& dm,
59 int nvar,
60 int ngrow);
61
62 FabArrayBase (const BoxArray& bxs,
63 const DistributionMapping& dm,
64 int nvar,
65 const IntVect& ngrow);
66
67 FabArrayBase (FabArrayBase&& rhs) noexcept = default;
68 FabArrayBase (const FabArrayBase& rhs) = default;
69 FabArrayBase& operator= (const FabArrayBase& rhs) = default;
71
72 void define (const BoxArray& bxs,
73 const DistributionMapping& dm,
74 int nvar,
75 int ngrow);
76
77 void define (const BoxArray& bxs,
78 const DistributionMapping& dm,
79 int nvar,
80 const IntVect& ngrow);
81
83 [[nodiscard]] int nGrow (int direction = 0) const noexcept { return n_grow[direction]; }
84
85 [[nodiscard]] IntVect nGrowVect () const noexcept { return n_grow; }
86
88 [[nodiscard]] int nComp () const noexcept { return n_comp; }
89
91 [[nodiscard]] IndexType ixType () const noexcept { return boxarray.ixType(); }
92
93 //Return whether this FabArray is empty
94 [[nodiscard]] bool empty () const noexcept { return boxarray.empty(); }
95
100 [[nodiscard]] const BoxArray& boxArray () const noexcept { return boxarray; }
101
106 [[nodiscard]] Box box (int K) const noexcept { return boxarray[K]; }
107
112 [[nodiscard]] Box fabbox (int K) const noexcept;
113
115 [[nodiscard]] int size () const noexcept { return static_cast<int>(boxarray.size()); }
116
118 [[nodiscard]] int local_size () const noexcept { return static_cast<int>(indexArray.size()); }
119
121 [[nodiscard]] const Vector<int> &IndexArray () const noexcept { return indexArray; }
122
124 [[nodiscard]] int localindex (int K) const noexcept {
125 auto low = std::ranges::lower_bound(indexArray, K);
126 if (low != indexArray.end() && *low == K) {
127 return static_cast<int>(low - indexArray.begin());
128 }
129 else {
130 return -1;
131 }
132 }
133
135 [[nodiscard]] const DistributionMapping& DistributionMap () const noexcept { return distributionMap; }
136
140 [[nodiscard]] bool is_nodal () const noexcept;
144 [[nodiscard]] bool is_nodal (int dir) const noexcept;
148 [[nodiscard]] bool is_cell_centered () const noexcept;
149
156 void setMultiGhost(bool a_multi_ghost) {m_multi_ghost = a_multi_ghost;}
157
158 // These are provided for convenience to keep track of how many
159 // ghost cells are up to date. The number of filled ghost cells
160 // is updated by FillBoundary and ParallelCopy.
162 [[nodiscard]] IntVect nGrowFilled () const noexcept { return n_filled; }
168 void setNGrowFilled (IntVect const& ng) noexcept { n_filled = ng; }
169
171 [[nodiscard]] bool isFusingCandidate () const noexcept;
172
174 struct CacheStats
175 {
176 int size{0};
177 int maxsize{0};
178 Long maxuse{0};
179 Long nuse{0};
180 Long nbuild{0};
181 Long nerase{0};
182 Long bytes{0};
183 Long bytes_hwm{0};
184 std::string name;
185 explicit CacheStats (std::string name_)
186 : name(std::move(name_)) {}
187 void recordBuild () noexcept {
188 ++size;
189 ++nbuild;
190 maxsize = std::max(maxsize, size);
191 }
192 void recordErase (Long n) noexcept {
193 // n: how many times the item to be deleted has been used.
194 --size;
195 ++nerase;
196 maxuse = std::max(maxuse, n);
197 }
198 void recordUse () noexcept { ++nuse; }
199 void print () const {
200 amrex::Print(Print::AllProcs) << "### " << name << " ###\n"
201 << " tot # of builds : " << nbuild << "\n"
202 << " tot # of erasures: " << nerase << "\n"
203 << " tot # of uses : " << nuse << "\n"
204 << " max cache size : " << maxsize << "\n"
205 << " max # of uses : " << maxuse << "\n";
206 }
207 };
211 {
216 CopyComTag () noexcept = default;
217 CopyComTag (const Box& db, const Box& sb, int didx, int sidx) noexcept
218 : dbox(db), sbox(sb), dstIndex(didx), srcIndex(sidx) {}
219 bool operator< (const CopyComTag& rhs) const noexcept {
220 return (srcIndex < rhs.srcIndex) || ((srcIndex == rhs.srcIndex) && (
221 (sbox.smallEnd() < rhs.sbox.smallEnd()
222 || ((sbox.smallEnd() == rhs.sbox.smallEnd()) && (
223 (dstIndex < rhs.dstIndex) || ((dstIndex == rhs.dstIndex) && (
224 (dbox.smallEnd() < rhs.dbox.smallEnd()))))))));
225 }
226 //
227 // Some typedefs & helper functions used throughout the code.
228 //
229 using CopyComTagsContainer = std::vector<CopyComTag>;
230
231 using MapOfCopyComTagContainers = std::map<int,CopyComTagsContainer>;
232 };
233 //
234 // Some useful typedefs.
235 //
238 //
240
246 struct BDKey {
247 BDKey () noexcept = default;
248 BDKey (const BoxArray::RefID& baid, const DistributionMapping::RefID& dmid) noexcept
249 : m_ba_id(baid), m_dm_id(dmid) {}
250 bool operator< (const BDKey& rhs) const noexcept {
251 return (m_ba_id < rhs.m_ba_id) ||
252 ((m_ba_id == rhs.m_ba_id) && (m_dm_id < rhs.m_dm_id));
253 }
254 bool operator== (const BDKey& rhs) const noexcept {
255 return m_ba_id == rhs.m_ba_id && m_dm_id == rhs.m_dm_id;
256 }
257 bool operator!= (const BDKey& rhs) const noexcept {
258 return m_ba_id != rhs.m_ba_id || m_dm_id != rhs.m_dm_id;
259 }
260 friend std::ostream& operator<< (std::ostream& os, const BDKey& id);
261 private:
262 BoxArray::RefID m_ba_id;
264 };
265
266 [[nodiscard]] BDKey getBDKey () const noexcept {
268 }
269
271 void updateBDKey ();
272
273 //
285
286 //
289 {
290 int fromProc{0};
291 int toProc{0};
292 int fabIndex{0};
293 int fineIndex{0};
294 int srcComp{0};
295 int destComp{0};
296 int nComp{0};
297 int face{0};
299 int fillBoxId{0};
303 };
304
307
310
312 static void Initialize ();
313 static void Finalize ();
320
321 struct FPinfo
322 {
323 FPinfo (const FabArrayBase& srcfa,
324 const FabArrayBase& dstfa,
325 const Box& dstdomain,
326 const IntVect& dstng,
327 const BoxConverter& coarsener,
328 const Box& fdomain,
329 const Box& cdomain,
330 const EB2::IndexSpace* index_space);
331
332 [[nodiscard]] Long bytes () const;
333
337 std::unique_ptr<FabFactory<FArrayBox> > fact_crse_patch;
338 std::unique_ptr<FabFactory<FArrayBox> > fact_fine_patch;
339 //
344 std::unique_ptr<BoxConverter> m_coarsener;
345 //
347 };
348
349 using FPinfoCache = std::multimap<BDKey,FabArrayBase::FPinfo*>;
350 using FPinfoCacheIter = FPinfoCache::iterator;
351
353
354 static CacheStats m_FPinfo_stats;
355
356 static const FPinfo& TheFPinfo (const FabArrayBase& srcfa,
357 const FabArrayBase& dstfa,
358 const IntVect& dstng,
359 const BoxConverter& coarsener,
360 const Geometry& fgeom,
361 const Geometry& cgeom,
362 const EB2::IndexSpace*);
363
364 void flushFPinfo (bool no_assertion=false) const;
365
366 //
368 struct CFinfo
369 {
370 CFinfo (const FabArrayBase& finefa,
371 const Geometry& finegm,
372 const IntVect& ng,
373 bool include_periodic,
374 bool include_physbndry);
375
376 [[nodiscard]] Long bytes () const;
377
378 static Box Domain (const Geometry& geom, const IntVect& ng,
379 bool include_periodic, bool include_physbndry);
380
384 //
390 //
392 };
393
394 using CFinfoCache = std::multimap<BDKey,FabArrayBase::CFinfo*>;
395 using CFinfoCacheIter = CFinfoCache::iterator;
396
398
399 static CacheStats m_CFinfo_stats;
400
401 static const CFinfo& TheCFinfo (const FabArrayBase& finefa,
402 const Geometry& finegm,
403 const IntVect& ng,
404 bool include_periodic,
405 bool include_physbndry);
406
407 void flushCFinfo (bool no_assertion=false) const;
408
409 //
411 enum CpOp { COPY = 0, ADD = 1 };
412
439 const TileArray* getTileArray (const IntVect& tilesize) const;
440
441 // Memory Usage Tags
442 struct meminfo {
445 };
446 static std::map<std::string, meminfo> m_mem_usage;
447
455 static void updateMemUsage (std::string const& tag, Long nbytes, Arena const* ar);
456
458 static void printMemUsage ();
459
461 static Long queryMemUsage (const std::string& tag = std::string("All"));
462
464 static Long queryMemUsageHWM (const std::string& tag = std::string("All"));
465
471 static void pushRegionTag (const char* t);
473 static void pushRegionTag (std::string t);
475 static void popRegionTag ();
476
477 static AMREX_EXPORT std::vector<std::string> m_region_tag;
478 struct RegionTag {
479 RegionTag (const char* t) : tagged(true) { pushRegionTag(t); }
480 RegionTag (const std::string& t) : tagged(true) { pushRegionTag(t); }
481 RegionTag (RegionTag const&) = delete;
482 RegionTag (RegionTag && rhs) noexcept : tagged(rhs.tagged) { rhs.tagged = false; }
483 RegionTag& operator= (RegionTag const&) = delete;
485 ~RegionTag () { if (tagged) { popRegionTag(); } }
486 private:
487 bool tagged = false;
488 };
489
490//#ifndef AMREX_USE_GPU
491//protected:
492//#endif
493
501 void clear ();
502
508 const std::vector<bool>& OwnerShip () const noexcept { return ownership; }
509 bool isOwner (int li) const noexcept { return ownership[li]; }
510
511 //
512 // The data ...
513 //
517 std::vector<bool> ownership;
520 mutable BDKey m_bdkey;
521 IntVect n_filled; // Note that IntVect is zero by default.
522 bool m_multi_ghost = false;
523
524 //
525 // Tiling
526 //
527 // We use tile size as the key for the inner map.
528
529 using TAMap = std::map<std::pair<IntVect,IntVect>, TileArray>;
530 using TACache = std::map<BDKey, TAMap>;
531 //
533 static CacheStats m_TAC_stats;
534 //
535 void buildTileArray (const IntVect& tilesize, TileArray& ta) const;
536 //
537 void flushTileArray (const IntVect& tilesize = IntVect::TheZeroVector(),
538 bool no_assertion=false) const;
539 static void flushTileArrayCache ();
540
542 {
543 // The cache of local and send/recv per FillBoundary() or ParallelCopy().
544 bool m_threadsafe_loc = false;
545 bool m_threadsafe_rcv = false;
546 std::unique_ptr<CopyComTagsContainer> m_LocTags;
547 std::unique_ptr<MapOfCopyComTagContainers> m_SndTags;
548 std::unique_ptr<MapOfCopyComTagContainers> m_RcvTags;
549 };
550
560 void define_fb_metadata (CommMetaData& cmd, const IntVect& nghost, bool cross,
561 const Periodicity& period, bool multi_ghost) const;
562
563 //
565 struct FB
567 {
568 FB (const FabArrayBase& fa, const IntVect& nghost,
569 bool cross, const Periodicity& period,
570 bool enforce_periodicity_only, bool override_sync,
571 bool multi_ghost, IntVect const& sumboundary_src_nghost);
572
573 std::uint64_t m_id = std::numeric_limits<std::uint64_t>::max();
579 bool m_epo;
582 //
584 bool m_multi_ghost = false;
585 //
586#if defined(__CUDACC__) && defined (AMREX_USE_CUDA)
587 CudaGraph<CopyMemory> m_localCopy;
588 CudaGraph<CopyMemory> m_copyToBuffer;
589 CudaGraph<CopyMemory> m_copyFromBuffer;
590#endif
591 //
592 [[nodiscard]] Long bytes () const;
593 private:
594 void define_fb (const FabArrayBase& fa);
595 void define_epo (const FabArrayBase& fa);
596 void define_os (const FabArrayBase& fa);
597 void define_sb (const FabArrayBase& fa);
598 void tag_one_box (int krcv, BoxArray const& ba, DistributionMapping const& dm,
599 bool build_recv_tag);
600 };
601 //
602 using FBCache = std::multimap<BDKey,FabArrayBase::FB*>;
603 using FBCacheIter = FBCache::iterator;
604 //
606 static CacheStats m_FBC_stats;
607 //
621 const FB& getFB (const IntVect& nghost, const Periodicity& period,
622 bool cross=false, bool enforce_periodicity_only = false,
623 bool override_sync = false,
624 IntVect const& sumboundary_src_nghost = IntVect(-1)) const;
625
626 //
628 struct CPC
630 {
631 CPC (const FabArrayBase& dstfa, const IntVect& dstng,
632 const FabArrayBase& srcfa, const IntVect& srcng,
633 const Periodicity& period, bool to_ghost_cells_only = false,
634 const IntVect& offset = IntVect(0));
635 CPC (const BoxArray& dstba, const DistributionMapping& dstdm,
636 const Vector<int>& dstidx, const IntVect& dstng,
637 const BoxArray& srcba, const DistributionMapping& srcdm,
638 const Vector<int>& srcidx, const IntVect& srcng,
639 const Periodicity& period, int myproc);
640 CPC (const BoxArray& ba, const IntVect& ng,
641 const DistributionMapping& dstdm, const DistributionMapping& srcdm);
642
643 [[nodiscard]] Long bytes () const;
644
645 std::uint64_t m_id = std::numeric_limits<std::uint64_t>::max();
652 bool m_tgco;
655 //
657
658 private:
659 void define (const BoxArray& ba_dst, const DistributionMapping& dm_dst,
660 const Vector<int>& imap_dst,
661 const BoxArray& ba_src, const DistributionMapping& dm_src,
662 const Vector<int>& imap_src,
663 int MyProc = ParallelDescriptor::MyProc());
664 };
665
666 //
667 using CPCache = std::multimap<BDKey,FabArrayBase::CPC*>;
668 using CPCacheIter = CPCache::iterator;
669 //
671 static CacheStats m_CPC_stats;
672 //
685 const CPC& getCPC (const IntVect& dstng, const FabArrayBase& src, const IntVect& srcng,
686 const Periodicity& period, bool to_ghost_cells_only = false,
687 const IntVect& offset = IntVect(0)) const;
688
689 //
691 struct RB90
693 {
694 RB90 (const FabArrayBase& fa, const IntVect& nghost, Box const& domain);
697 private:
698 void define (const FabArrayBase& fa);
699 };
700 //
701 using RB90Cache = std::multimap<BDKey,FabArrayBase::RB90*>;
702 using RB90CacheIter = RB90Cache::iterator;
703 //
705 //
708 const RB90& getRB90 (const IntVect& nghost, const Box& domain) const;
709 //
710 void flushRB90 (bool no_assertion=false) const;
711 static void flushRB90Cache ();
712
713 //
715 struct RB180
717 {
718 RB180 (const FabArrayBase& fa, const IntVect& nghost, Box const& domain);
721 private:
722 void define (const FabArrayBase& fa);
723 };
724 //
725 using RB180Cache = std::multimap<BDKey,FabArrayBase::RB180*>;
726 using RB180CacheIter = RB180Cache::iterator;
727 //
729 //
732 const RB180& getRB180 (const IntVect& nghost, const Box& domain) const;
733 //
734 void flushRB180 (bool no_assertion=false) const;
735 static void flushRB180Cache ();
736
737 //
739 struct PolarB
741 {
742 PolarB (const FabArrayBase& fa, const IntVect& nghost, Box const& domain);
745 private:
746 void define (const FabArrayBase& fa);
747 };
748 //
749 using PolarBCache = std::multimap<BDKey,FabArrayBase::PolarB*>;
750 using PolarBCacheIter = PolarBCache::iterator;
751 //
753 //
756 const PolarB& getPolarB (const IntVect& nghost, const Box& domain) const;
757 //
758 void flushPolarB (bool no_assertion=false) const;
759 static void flushPolarBCache ();
760
761#ifdef AMREX_USE_GPU
762 //
765 {
766 ParForInfo (const FabArrayBase& fa, const IntVect& nghost);
767 ~ParForInfo ();
768
769 int getNBlocksPerBox (int nthreads) const {
770 return int((m_ncellsmax+nthreads-1)/nthreads);
771 }
772 BoxIndexer const* getBoxes () const { return m_boxes; }
773
774 ParForInfo () = delete;
775 ParForInfo (ParForInfo const&) = delete;
776 ParForInfo (ParForInfo &&) = delete;
777 void operator= (ParForInfo const&) = delete;
778 void operator= (ParForInfo &&) = delete;
779
780 BATransformer m_bat;
783 BoxIndexer* m_boxes = nullptr;
784 char* m_hp = nullptr;
785 };
786
792 ParForInfo const& getParForInfo (const IntVect& nghost) const;
793
794 static std::multimap<BDKey,ParForInfo*> m_TheParForCache;
795
796 void flushParForInfo (bool no_assertion=false) const; // flushes its own cache
797 static void flushParForCache (); // flushes the entire cache
798
799#endif
800
801 //
803 static std::map<BDKey, int> m_BD_count;
804 //
806 void clearThisBD (bool no_assertion=false) const;
807 //
809 void addThisBD ();
810 //
812 {
818
819 void recordBuild () noexcept {
821 ++num_build;
823 }
824 void recordDelete () noexcept {
826 }
827 void recordMaxNumBoxArrays (int n) noexcept {
829 }
830 void recordMaxNumBAUse (int n) noexcept {
831 max_num_ba_use = std::max(max_num_ba_use, n);
832 }
833 void print () const {
834 amrex::Print(Print::AllProcs) << "### FabArray ###\n"
835 << " tot # of builds : " << num_build << "\n"
836 << " max # of FabArrays : " << max_num_fabarrays << "\n"
837 << " max # of BoxArrays : " << max_num_boxarrays << "\n"
838 << " max # of BoxArray uses: " << max_num_ba_use << "\n";
839 }
840 };
842
844
846 [[nodiscard]] static bool getAllocSingleChunk () { return m_alloc_single_chunk; }
847
849 [[nodiscard]] static std::uint64_t getNextCommMetaDataId ();
850
851private:
852
853 void flushFB (bool no_assertion=false) const;
854 static void flushFBCache ();
855
856 void flushCPC (bool no_assertion=false) const;
857 static void flushCPCache ();
858};
859
861namespace detail {
862 class SingleChunkArena final
863 : public Arena
864 {
865 public:
866 SingleChunkArena (Arena* a_arena, std::size_t a_size);
867 ~SingleChunkArena () override;
868
869 SingleChunkArena () = delete;
870 SingleChunkArena (const SingleChunkArena& rhs) = delete;
871 SingleChunkArena (SingleChunkArena&& rhs) = delete;
872 SingleChunkArena& operator= (const SingleChunkArena& rhs) = delete;
873 SingleChunkArena& operator= (SingleChunkArena&& rhs) = delete;
874
875 [[nodiscard]] void* alloc (std::size_t sz) override;
876 void free (void* pt) override;
877
878 // isDeviceAccessible and isHostAccessible can both be true.
879 [[nodiscard]] bool isDeviceAccessible () const override;
880 [[nodiscard]] bool isHostAccessible () const override;
881
882 [[nodiscard]] bool isManaged () const override;
883 [[nodiscard]] bool isDevice () const override;
884 [[nodiscard]] bool isPinned () const override;
885
886 [[nodiscard]] void* data () const noexcept { return (void*) m_root; }
887
888 private:
889 DataAllocator m_dallocator;
890 char* m_root = nullptr;
891 char* m_free = nullptr;
892 std::size_t m_size = 0;
893 };
894}
896
898[[nodiscard]] int nComp (FabArrayBase const& fa);
900[[nodiscard]] IntVect nGrowVect (FabArrayBase const& fa);
902[[nodiscard]] BoxArray const& boxArray (FabArrayBase const& fa);
904[[nodiscard]] DistributionMapping const& DistributionMap (FabArrayBase const& fa);
905
906#ifdef BL_USE_MPI
908bool CheckRcvStats (Vector<MPI_Status>& recv_stats, const Vector<std::size_t>& recv_size, int tag);
909#endif
910
911std::ostream& operator<< (std::ostream& os, const FabArrayBase::BDKey& id);
912
913}
914
915#endif
Memory arena base class and global arena accessors.
Container and helper utilities for sets of boxes on integer index space.
Lightweight Arena-backed allocator and deleter helpers.
Maps FABs in a FabArray to MPI processes.
#define AMREX_EXPORT
Definition AMReX_Extension.H:196
Array4< int const > offset
Definition AMReX_HypreMLABecLap.cpp:1129
Abstract base class for memory arenas.
Definition AMReX_Arena.H:153
Reference-counted collection of Boxes.
Definition AMReX_BoxArray.H:676
IndexType ixType() const noexcept
Return index type of this BoxArray.
Definition AMReX_BoxArray.H:1252
RefID getRefID() const noexcept
Return a unique ID of the reference.
Definition AMReX_BoxArray.H:1249
Long size() const noexcept
Return the number of boxes in the BoxArray.
Definition AMReX_BoxArray.H:753
bool empty() const noexcept
Return whether the BoxArray is empty.
Definition AMReX_BoxArray.H:759
Definition AMReX_Box.H:1292
__host__ __device__ const IntVectND< dim > & smallEnd() const &noexcept
Return the inclusive lower bound of the box.
Definition AMReX_Box.H:124
Calculates the distribution of FABs to MPI processes.
Definition AMReX_DistributionMapping.H:51
RefID getRefID() const noexcept
This gives a unique ID of the reference, which is different from dmID above.
Definition AMReX_DistributionMapping.H:542
Definition AMReX_EB2.H:28
Base class for FabArray.
Definition AMReX_FabArrayBase.H:47
void flushTileArray(const IntVect &tilesize=IntVect::TheZeroVector(), bool no_assertion=false) const
Definition AMReX_FabArrayBase.cpp:2469
static Long bytesOfMapOfCopyComTagContainers(const MapOfCopyComTagContainers &)
Definition AMReX_FabArrayBase.cpp:223
IntVect nGrowVect() const noexcept
Definition AMReX_FabArrayBase.H:85
static std::multimap< BDKey, ParForInfo * > m_TheParForCache
Definition AMReX_FabArrayBase.H:794
void clearThisBD(bool no_assertion=false) const
clear BD count and caches associated with this BD, if no other is using this BD.
Definition AMReX_FabArrayBase.cpp:2520
void clear()
Clear this object's BoxArray, DistributionMapping, local index/ownership data, and BDKey so the conta...
Definition AMReX_FabArrayBase.cpp:207
void flushPolarB(bool no_assertion=false) const
This flushes its own PolarB.
Definition AMReX_FabArrayBase.cpp:1837
std::multimap< BDKey, FabArrayBase::FPinfo * > FPinfoCache
Definition AMReX_FabArrayBase.H:349
Vector< int > indexArray
Definition AMReX_FabArrayBase.H:516
FabArrayBase()=default
static void pushRegionTag(const char *t)
Push a memory-region tag used to classify subsequent FabArray allocations.
Definition AMReX_FabArrayBase.cpp:2669
static TACache m_TheTileArrayCache
Definition AMReX_FabArrayBase.H:532
const Vector< int > & IndexArray() const noexcept
Return constant reference to indices in the FabArray that we have access.
Definition AMReX_FabArrayBase.H:121
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.
Definition AMReX_FabArrayBase.cpp:666
const TileArray * getTileArray(const IntVect &tilesize) const
Return the cached tile decomposition used by MFIter.
Definition AMReX_FabArrayBase.cpp:2342
static void flushRB90Cache()
This flushes the entire cache.
Definition AMReX_FabArrayBase.cpp:1499
static FabArrayStats m_FA_stats
Definition AMReX_FabArrayBase.H:841
static bool getAllocSingleChunk()
Query whether single-chunk allocation is enabled for new FabArrays.
Definition AMReX_FabArrayBase.H:846
BDKey m_bdkey
Definition AMReX_FabArrayBase.H:520
void addThisBD()
add the current BD into BD count database
Definition AMReX_FabArrayBase.cpp:2550
void setNGrowFilled(IntVect const &ng) noexcept
Update the bookkeeping on how many ghost cells are known to be valid.
Definition AMReX_FabArrayBase.H:168
static void popRegionTag()
Pop the most recent region tag. The tag stack must be nonempty.
Definition AMReX_FabArrayBase.cpp:2681
static CFinfoCache m_TheCrseFineCache
Definition AMReX_FabArrayBase.H:397
RB90Cache::iterator RB90CacheIter
Definition AMReX_FabArrayBase.H:702
const RB90 & getRB90(const IntVect &nghost, const Box &domain) const
Definition AMReX_FabArrayBase.cpp:1508
static PolarBCache m_ThePolarBCache
Definition AMReX_FabArrayBase.H:752
void flushParForInfo(bool no_assertion=false) const
Definition AMReX_FabArrayBase.cpp:2774
void updateBDKey()
Refresh the cached BDKey after rebinding BoxArray or DistributionMapping data.
Definition AMReX_FabArrayBase.cpp:2562
static CacheStats m_FBC_stats
Definition AMReX_FabArrayBase.H:606
void buildTileArray(const IntVect &tilesize, TileArray &ta) const
Definition AMReX_FabArrayBase.cpp:2377
FBCache::iterator FBCacheIter
Definition AMReX_FabArrayBase.H:603
static void Initialize()
Initialize from ParmParse with "fabarray" prefix.
Definition AMReX_FabArrayBase.cpp:95
static std::vector< std::string > m_region_tag
Definition AMReX_FabArrayBase.H:477
FabArrayBase(FabArrayBase &&rhs) noexcept=default
static void flushRB180Cache()
This flushes the entire cache.
Definition AMReX_FabArrayBase.cpp:1663
int n_comp
Definition AMReX_FabArrayBase.H:519
static void printMemUsage()
Print the tracked memory usage table on the current subcommunicator's I/O process.
Definition AMReX_FabArrayBase.cpp:2635
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.
Definition AMReX_FabArrayBase.cpp:1298
static CacheStats m_FPinfo_stats
Definition AMReX_FabArrayBase.H:354
~FabArrayBase()=default
bool isFusingCandidate() const noexcept
Is this a good candidate for kernel fusing?
Definition AMReX_FabArrayBase.cpp:2705
bool is_cell_centered() const noexcept
This tests on whether the FabArray is cell-centered.
Definition AMReX_FabArrayBase.cpp:2699
bool is_nodal() const noexcept
This tests on whether the FabArray is fully nodal.
Definition AMReX_FabArrayBase.cpp:2687
bool isOwner(int li) const noexcept
Definition AMReX_FabArrayBase.H:509
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 *)
Definition AMReX_FabArrayBase.cpp:2066
IndexType ixType() const noexcept
Return index type.
Definition AMReX_FabArrayBase.H:91
static Long queryMemUsageHWM(const std::string &tag=std::string("All"))
Query the recorded high-water mark tracked under tag (defaults to the All tag).
Definition AMReX_FabArrayBase.cpp:2658
int size() const noexcept
Return the number of FABs in the FabArray.
Definition AMReX_FabArrayBase.H:115
void flushCFinfo(bool no_assertion=false) const
Definition AMReX_FabArrayBase.cpp:2284
std::multimap< BDKey, FabArrayBase::RB180 * > RB180Cache
Definition AMReX_FabArrayBase.H:725
static CacheStats m_CPC_stats
Definition AMReX_FabArrayBase.H:671
static RB180Cache m_TheRB180Cache
Definition AMReX_FabArrayBase.H:728
IntVect nGrowFilled() const noexcept
Return the halo width currently recorded as up to date.
Definition AMReX_FabArrayBase.H:162
FabArrayBase & operator=(const FabArrayBase &rhs)=default
void flushFPinfo(bool no_assertion=false) const
Definition AMReX_FabArrayBase.cpp:2126
void define(const BoxArray &bxs, const DistributionMapping &dm, int nvar, int ngrow)
Definition AMReX_FabArrayBase.cpp:175
const RB180 & getRB180(const IntVect &nghost, const Box &domain) const
Definition AMReX_FabArrayBase.cpp:1672
static CacheStats m_TAC_stats
Definition AMReX_FabArrayBase.H:533
static CacheStats m_CFinfo_stats
Definition AMReX_FabArrayBase.H:399
void setMultiGhost(bool a_multi_ghost)
Record whether this FabArrayBase participates in multi-ghost exchanges.
Definition AMReX_FabArrayBase.H:156
const std::vector< bool > & OwnerShip() const noexcept
Return owenership of fabs. The concept of ownership only applies when UPC++ team is used....
Definition AMReX_FabArrayBase.H:508
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.
Definition AMReX_FabArrayBase.cpp:576
static void updateMemUsage(std::string const &tag, Long nbytes, Arena const *ar)
Accumulate memory usage statistics for diagnostics.
Definition AMReX_FabArrayBase.cpp:2627
static FPinfoCache m_TheFillPatchCache
Definition AMReX_FabArrayBase.H:352
static IntVect mfiter_tile_size
Default tilesize in MFIter.
Definition AMReX_FabArrayBase.H:306
ParForInfo const & getParForInfo(const IntVect &nghost) const
Obtain metadata describing how to launch device ParallelFor over this FabArray.
Definition AMReX_FabArrayBase.cpp:2755
static std::map< BDKey, int > m_BD_count
Keep track of how many FabArrays are built with the same BDKey.
Definition AMReX_FabArrayBase.H:803
static bool m_alloc_single_chunk
Definition AMReX_FabArrayBase.H:843
std::map< std::pair< IntVect, IntVect >, TileArray > TAMap
Definition AMReX_FabArrayBase.H:529
int nGrow(int direction=0) const noexcept
Return the grow factor that defines the region of definition.
Definition AMReX_FabArrayBase.H:83
CPCache::iterator CPCacheIter
Definition AMReX_FabArrayBase.H:668
CopyComTag::CopyComTagsContainer CopyComTagsContainer
Definition AMReX_FabArrayBase.H:236
static FBCache m_TheFBCache
Definition AMReX_FabArrayBase.H:605
std::multimap< BDKey, FabArrayBase::FB * > FBCache
Definition AMReX_FabArrayBase.H:602
RB180Cache::iterator RB180CacheIter
Definition AMReX_FabArrayBase.H:726
BDKey getBDKey() const noexcept
Definition AMReX_FabArrayBase.H:266
static void flushParForCache()
Definition AMReX_FabArrayBase.cpp:2786
CopyComTag::MapOfCopyComTagContainers MapOfCopyComTagContainers
Definition AMReX_FabArrayBase.H:237
static std::map< std::string, meminfo > m_mem_usage
Definition AMReX_FabArrayBase.H:446
int localindex(int K) const noexcept
Return local index in the vector of FABs.
Definition AMReX_FabArrayBase.H:124
FabArrayBase(const FabArrayBase &rhs)=default
const DistributionMapping & DistributionMap() const noexcept
Return constant reference to associated DistributionMapping.
Definition AMReX_FabArrayBase.H:135
static CPCache m_TheCPCache
Definition AMReX_FabArrayBase.H:670
int local_size() const noexcept
Return the number of local FABs in the FabArray.
Definition AMReX_FabArrayBase.H:118
IntVect n_grow
Definition AMReX_FabArrayBase.H:518
static const CFinfo & TheCFinfo(const FabArrayBase &finefa, const Geometry &finegm, const IntVect &ng, bool include_periodic, bool include_physbndry)
Definition AMReX_FabArrayBase.cpp:2242
void flushRB90(bool no_assertion=false) const
This flushes its own RB90.
Definition AMReX_FabArrayBase.cpp:1487
static Long queryMemUsage(const std::string &tag=std::string("All"))
Query the currently-live bytes tracked under tag (defaults to the All tag).
Definition AMReX_FabArrayBase.cpp:2647
std::vector< bool > ownership
Definition AMReX_FabArrayBase.H:517
std::multimap< BDKey, FabArrayBase::CPC * > CPCache
Definition AMReX_FabArrayBase.H:667
std::multimap< BDKey, FabArrayBase::CFinfo * > CFinfoCache
Definition AMReX_FabArrayBase.H:394
bool empty() const noexcept
Definition AMReX_FabArrayBase.H:94
std::multimap< BDKey, FabArrayBase::RB90 * > RB90Cache
Definition AMReX_FabArrayBase.H:701
static RB90Cache m_TheRB90Cache
Definition AMReX_FabArrayBase.H:704
static void flushTileArrayCache()
This flushes the entire cache.
Definition AMReX_FabArrayBase.cpp:2506
void flushRB180(bool no_assertion=false) const
This flushes its own RB180.
Definition AMReX_FabArrayBase.cpp:1651
CpOp
parallel copy or add
Definition AMReX_FabArrayBase.H:411
@ ADD
Definition AMReX_FabArrayBase.H:411
@ COPY
Definition AMReX_FabArrayBase.H:411
bool m_multi_ghost
Definition AMReX_FabArrayBase.H:522
IntVect n_filled
Definition AMReX_FabArrayBase.H:521
Box box(int K) const noexcept
Return the Kth Box in the BoxArray. That is, the valid region of the Kth grid.
Definition AMReX_FabArrayBase.H:106
std::map< BDKey, TAMap > TACache
Definition AMReX_FabArrayBase.H:530
static void flushPolarBCache()
This flushes the entire cache.
Definition AMReX_FabArrayBase.cpp:1849
DistributionMapping distributionMap
Definition AMReX_FabArrayBase.H:515
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.
Definition AMReX_FabArrayBase.cpp:217
FPinfoCache::iterator FPinfoCacheIter
Definition AMReX_FabArrayBase.H:350
friend void FillBoundary(Vector< FabArray< FAB > * > const &mf, const Periodicity &period)
CFinfoCache::iterator CFinfoCacheIter
Definition AMReX_FabArrayBase.H:395
static std::uint64_t getNextCommMetaDataId()
Generate a monotonically increasing identifier for communication metadata objects.
Definition AMReX_FabArrayBase.cpp:2797
static void Finalize()
Definition AMReX_FabArrayBase.cpp:2301
PolarBCache::iterator PolarBCacheIter
Definition AMReX_FabArrayBase.H:750
static int MaxComp
The maximum number of components to copy() at a time.
Definition AMReX_FabArrayBase.H:309
BoxArray boxarray
Definition AMReX_FabArrayBase.H:514
static IntVect comm_tile_size
communication tile size
Definition AMReX_FabArrayBase.H:319
int nComp() const noexcept
Return number of variables (aka components) associated with each point.
Definition AMReX_FabArrayBase.H:88
const BoxArray & boxArray() const noexcept
Return a constant reference to the BoxArray that defines the valid region associated with this FabArr...
Definition AMReX_FabArrayBase.H:100
std::multimap< BDKey, FabArrayBase::PolarB * > PolarBCache
Definition AMReX_FabArrayBase.H:749
const PolarB & getPolarB(const IntVect &nghost, const Box &domain) const
Definition AMReX_FabArrayBase.cpp:1858
An Array of FortranArrayBox(FAB)-like Objects.
Definition AMReX_FabArray.H:356
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:75
__host__ static __device__ constexpr IntVectND< dim > TheZeroVector() noexcept
This static member function returns a reference to a constant IntVectND object, all of whose dim argu...
Definition AMReX_IntVect.H:771
Iterator for looping ever tiles and boxes of amrex::FabArray based containers.
Definition AMReX_MFIter.H:88
This provides length of period for periodic domains. 0 means it is not periodic in that direction....
Definition AMReX_Periodicity.H:17
This class provides the user with a few print options.
Definition AMReX_Print.H:35
static constexpr int AllProcs
Definition AMReX_Print.H:38
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition AMReX_Vector.H:29
Long size() const noexcept
Definition AMReX_Vector.H:54
amrex_long Long
Definition AMReX_INT.H:30
int MyProc() noexcept
Definition AMReX_ParallelDescriptor.H:128
std::string const & name()
Definition AMReX_Machine.cpp:46
Definition AMReX_Amr.cpp:50
std::ostream & operator<<(std::ostream &os, AmrMesh const &amr_mesh)
Stream helper; forwards to the friend declared inside AmrMesh.
Definition AMReX_AmrMesh.cpp:1306
BoxArray const & boxArray(FabArrayBase const &fa)
Convenience wrapper that forwards to fa.boxArray().
Definition AMReX_FabArrayBase.cpp:2862
DistributionMapping const & DistributionMap(FabArrayBase const &fa)
Convenience wrapper that forwards to fa.DistributionMap().
Definition AMReX_FabArrayBase.cpp:2867
int nComp(FabArrayBase const &fa)
Convenience wrapper that forwards to fa.nComp().
Definition AMReX_FabArrayBase.cpp:2852
IntVectND< 3 > IntVect
IntVect is an alias for amrex::IntVectND instantiated with AMREX_SPACEDIM.
Definition AMReX_BaseFwd.H:38
IntVect nGrowVect(FabArrayBase const &fa)
Convenience wrapper that forwards to fa.nGrowVect().
Definition AMReX_FabArrayBase.cpp:2857
const int[]
Definition AMReX_BLProfiler.cpp:1664
Definition AMReX_BoxArray.H:1237
Utility that maps flattened point indices back to IntVectND coordinates.
Definition AMReX_Box.H:2494
Lightweight identity handle wrapping a pointer to the underlying Ref.
Definition AMReX_DistributionMapping.H:528
Definition AMReX_FabArrayBase.H:246
bool operator==(const BDKey &rhs) const noexcept
Definition AMReX_FabArrayBase.H:254
bool operator<(const BDKey &rhs) const noexcept
Definition AMReX_FabArrayBase.H:250
bool operator!=(const BDKey &rhs) const noexcept
Definition AMReX_FabArrayBase.H:257
BDKey() noexcept=default
friend std::ostream & operator<<(std::ostream &os, const BDKey &id)
Definition AMReX_FabArrayBase.cpp:2620
coarse/fine boundary
Definition AMReX_FabArrayBase.H:369
Box m_fine_domain
Definition AMReX_FabArrayBase.H:386
IntVect m_ng
Definition AMReX_FabArrayBase.H:387
Long bytes() const
Definition AMReX_FabArrayBase.cpp:2233
bool m_include_periodic
Definition AMReX_FabArrayBase.H:388
static Box Domain(const Geometry &geom, const IntVect &ng, bool include_periodic, bool include_physbndry)
Definition AMReX_FabArrayBase.cpp:2214
bool m_include_physbndry
Definition AMReX_FabArrayBase.H:389
Long m_nuse
Definition AMReX_FabArrayBase.H:391
BoxArray ba_cfb
Definition AMReX_FabArrayBase.H:381
BDKey m_fine_bdk
Definition AMReX_FabArrayBase.H:385
Vector< int > fine_grid_idx
local array
Definition AMReX_FabArrayBase.H:383
DistributionMapping dm_cfb
Definition AMReX_FabArrayBase.H:382
parallel copy or add
Definition AMReX_FabArrayBase.H:630
BoxArray m_srcba
Definition AMReX_FabArrayBase.H:653
IntVect m_srcng
Definition AMReX_FabArrayBase.H:648
bool m_tgco
Definition AMReX_FabArrayBase.H:652
BoxArray m_dstba
Definition AMReX_FabArrayBase.H:654
BDKey m_srcbdk
Definition AMReX_FabArrayBase.H:646
std::uint64_t m_id
Definition AMReX_FabArrayBase.H:645
Long bytes() const
Definition AMReX_FabArrayBase.cpp:234
BDKey m_dstbdk
Definition AMReX_FabArrayBase.H:647
Long m_nuse
Definition AMReX_FabArrayBase.H:656
IntVect m_offset
Definition AMReX_FabArrayBase.H:650
Periodicity m_period
Definition AMReX_FabArrayBase.H:651
IntVect m_dstng
Definition AMReX_FabArrayBase.H:649
Definition AMReX_FabArrayBase.H:542
bool m_threadsafe_loc
Definition AMReX_FabArrayBase.H:544
bool m_threadsafe_rcv
Definition AMReX_FabArrayBase.H:545
std::unique_ptr< MapOfCopyComTagContainers > m_RcvTags
Definition AMReX_FabArrayBase.H:548
std::unique_ptr< MapOfCopyComTagContainers > m_SndTags
Definition AMReX_FabArrayBase.H:547
std::unique_ptr< CopyComTagsContainer > m_LocTags
Definition AMReX_FabArrayBase.H:546
Used by a bunch of routines when communicating via MPI.
Definition AMReX_FabArrayBase.H:211
Box sbox
Definition AMReX_FabArrayBase.H:213
CopyComTag() noexcept=default
std::vector< CopyComTag > CopyComTagsContainer
Definition AMReX_FabArrayBase.H:229
bool operator<(const CopyComTag &rhs) const noexcept
Definition AMReX_FabArrayBase.H:219
int srcIndex
Definition AMReX_FabArrayBase.H:215
Box dbox
Definition AMReX_FabArrayBase.H:212
int dstIndex
Definition AMReX_FabArrayBase.H:214
std::map< int, CopyComTagsContainer > MapOfCopyComTagContainers
Definition AMReX_FabArrayBase.H:231
FillBoundary.
Definition AMReX_FabArrayBase.H:567
bool m_multi_ghost
Definition AMReX_FabArrayBase.H:584
Long m_nuse
Definition AMReX_FabArrayBase.H:583
IntVect m_ngrow
Definition AMReX_FabArrayBase.H:576
bool m_cross
Definition AMReX_FabArrayBase.H:578
IndexType m_typ
Definition AMReX_FabArrayBase.H:574
Long bytes() const
Definition AMReX_FabArrayBase.cpp:254
Periodicity m_period
Definition AMReX_FabArrayBase.H:581
std::uint64_t m_id
Definition AMReX_FabArrayBase.H:573
bool m_epo
Definition AMReX_FabArrayBase.H:579
bool m_override_sync
Definition AMReX_FabArrayBase.H:580
IntVect m_crse_ratio
BoxArray in FabArrayBase may have crse_ratio.
Definition AMReX_FabArrayBase.H:575
IntVect m_sb_snghost
Definition AMReX_FabArrayBase.H:577
Definition AMReX_FabArrayBase.H:322
std::unique_ptr< FabFactory< FArrayBox > > fact_crse_patch
Definition AMReX_FabArrayBase.H:337
DistributionMapping dm_patch
Definition AMReX_FabArrayBase.H:336
BDKey m_srcbdk
Definition AMReX_FabArrayBase.H:340
Long bytes() const
Definition AMReX_FabArrayBase.cpp:2057
BoxArray ba_crse_patch
Definition AMReX_FabArrayBase.H:334
std::unique_ptr< FabFactory< FArrayBox > > fact_fine_patch
Definition AMReX_FabArrayBase.H:338
std::unique_ptr< BoxConverter > m_coarsener
Definition AMReX_FabArrayBase.H:344
Box m_dstdomain
Definition AMReX_FabArrayBase.H:342
IntVect m_dstng
Definition AMReX_FabArrayBase.H:343
Long m_nuse
Definition AMReX_FabArrayBase.H:346
BDKey m_dstbdk
Definition AMReX_FabArrayBase.H:341
BoxArray ba_fine_patch
Definition AMReX_FabArrayBase.H:335
Definition AMReX_FabArrayBase.H:812
Long num_build
Definition AMReX_FabArrayBase.H:817
void recordDelete() noexcept
Definition AMReX_FabArrayBase.H:824
int max_num_boxarrays
Definition AMReX_FabArrayBase.H:815
void recordMaxNumBAUse(int n) noexcept
Definition AMReX_FabArrayBase.H:830
void recordMaxNumBoxArrays(int n) noexcept
Definition AMReX_FabArrayBase.H:827
void print() const
Definition AMReX_FabArrayBase.H:833
int max_num_fabarrays
Definition AMReX_FabArrayBase.H:814
int max_num_ba_use
Definition AMReX_FabArrayBase.H:816
int num_fabarrays
Definition AMReX_FabArrayBase.H:813
void recordBuild() noexcept
Definition AMReX_FabArrayBase.H:819
Used for collecting information used in communicating FABs.
Definition AMReX_FabArrayBase.H:289
int srcComp
Definition AMReX_FabArrayBase.H:294
int toProc
Definition AMReX_FabArrayBase.H:291
int fromProc
Definition AMReX_FabArrayBase.H:290
int fabArrayId
Definition AMReX_FabArrayBase.H:298
int procThatHasData
Definition AMReX_FabArrayBase.H:301
int procThatNeedsData
Definition AMReX_FabArrayBase.H:300
int destComp
Definition AMReX_FabArrayBase.H:295
int face
Definition AMReX_FabArrayBase.H:297
Box box
Definition AMReX_FabArrayBase.H:302
int fabIndex
Definition AMReX_FabArrayBase.H:292
int nComp
Definition AMReX_FabArrayBase.H:296
int fineIndex
Definition AMReX_FabArrayBase.H:293
int fillBoxId
Definition AMReX_FabArrayBase.H:299
For ParallelFor(FabArray)
Definition AMReX_FabArrayBase.H:765
ParForInfo(ParForInfo const &)=delete
Long m_ncellsmax
Definition AMReX_FabArrayBase.H:782
BATransformer m_bat
Definition AMReX_FabArrayBase.H:780
ParForInfo(ParForInfo &&)=delete
BoxIndexer const * getBoxes() const
Definition AMReX_FabArrayBase.H:772
char * m_hp
Definition AMReX_FabArrayBase.H:784
int getNBlocksPerBox(int nthreads) const
Definition AMReX_FabArrayBase.H:769
void operator=(ParForInfo const &)=delete
~ParForInfo()
Definition AMReX_FabArrayBase.cpp:2749
IntVect m_ng
Definition AMReX_FabArrayBase.H:781
BoxIndexer * m_boxes
Definition AMReX_FabArrayBase.H:783
Fill polar boundary in spherical coordinates.
Definition AMReX_FabArrayBase.H:741
Box m_domain
Definition AMReX_FabArrayBase.H:744
IntVect m_ngrow
Definition AMReX_FabArrayBase.H:743
Rotate Boundary by 180.
Definition AMReX_FabArrayBase.H:717
IntVect m_ngrow
Definition AMReX_FabArrayBase.H:719
Box m_domain
Definition AMReX_FabArrayBase.H:720
Rotate Boundary by 90.
Definition AMReX_FabArrayBase.H:693
Box m_domain
Definition AMReX_FabArrayBase.H:696
IntVect m_ngrow
Definition AMReX_FabArrayBase.H:695
Definition AMReX_FabArrayBase.H:478
~RegionTag()
Definition AMReX_FabArrayBase.H:485
RegionTag & operator=(RegionTag const &)=delete
RegionTag(RegionTag &&rhs) noexcept
Definition AMReX_FabArrayBase.H:482
RegionTag(const std::string &t)
Definition AMReX_FabArrayBase.H:480
RegionTag(RegionTag const &)=delete
RegionTag(const char *t)
Definition AMReX_FabArrayBase.H:479
Tiling.
Definition AMReX_FabArrayBase.H:276
Vector< int > indexMap
Definition AMReX_FabArrayBase.H:279
Vector< int > localIndexMap
Definition AMReX_FabArrayBase.H:280
Long bytes() const
Definition AMReX_FabArrayBase.cpp:274
Vector< int > localTileIndexMap
Definition AMReX_FabArrayBase.H:281
Vector< int > numLocalTiles
Definition AMReX_FabArrayBase.H:278
Long nuse
Definition AMReX_FabArrayBase.H:277
Vector< Box > tileArray
Definition AMReX_FabArrayBase.H:282
Definition AMReX_FabArrayBase.H:442
Long nbytes
Definition AMReX_FabArrayBase.H:443
Long nbytes_hwm
Definition AMReX_FabArrayBase.H:444