13#ifndef CD_TILEDMESHREFINE_H
14#define CD_TILEDMESHREFINE_H
18#include <unordered_map>
19#include <unordered_set>
23#include <IntVectSet.H>
24#include <ProblemDomain.H>
26#include <BoxIterator.H>
29#include <CD_NamespaceHeader.H>
63 const Vector<int>& a_refRatios,
64 const IntVect& a_tileSize,
65 const IntVect& a_maxBlockSize)
noexcept;
79 regrid(Vector<Vector<Box>>& a_newGrids, const Vector<IntVectSet>& a_tagsLevel) const noexcept;
91 std::unordered_set<std::uint64_t>
m_full;
94 std::unordered_map<std::uint64_t, std::vector<std::uint64_t>>
m_partial;
139 encodeSuper(
const IntVect& a_super)
const noexcept;
147 decodeSuper(
const std::uint64_t a_key)
const noexcept;
155 subIndex(
const IntVect& a_sub)
const noexcept;
199 const int a_refToFine,
200 const Box& a_thisTileBox)
const noexcept;
214 const IntVectSet& a_coarTags,
215 const ProblemDomain& a_domain,
216 const int a_refToFine,
217 const int a_refToCoar)
const noexcept;
248 const IntVect& a_maxTile,
249 const IntVect& a_probLo,
250 Vector<Box>& a_boxes)
const noexcept;
253#include <CD_NamespaceFooter.H>
Class for generating AMR boxes using a tiling algorithm.
Definition CD_TiledMeshRefine.H:46
virtual void makeBoxesFromTiles(Vector< Box > &a_boxes, const SuperTiles &a_tiles, const ProblemDomain &a_domain) const noexcept
Turn the super-tile representation into boxes.
Definition CD_TiledMeshRefine.cpp:367
virtual void makeLevelTiles(SuperTiles &a_tiles, const SuperTiles &a_fineTiles, const IntVectSet &a_coarTags, const ProblemDomain &a_domain, const int a_refToFine, const int a_refToCoar) const noexcept
Make the super-tile representation on the current level from tags and finer-level nesting.
Definition CD_TiledMeshRefine.cpp:316
void addFineTile(SuperTiles &a_tiles, const IntVect &a_fineTile) const noexcept
Add a fine tile (tile coordinates) to the representation by setting its sub-tile bit.
Definition CD_TiledMeshRefine.cpp:102
std::uint64_t encodeSuper(const IntVect &a_super) const noexcept
Pack a super-tile index into a 64-bit key (21 bits per direction).
Definition CD_TiledMeshRefine.cpp:66
Vector< int > m_refRatios
Refinement ratios.
Definition CD_TiledMeshRefine.H:106
void nestFrom(SuperTiles &a_tiles, const SuperTiles &a_finer, const int a_refToFine, const Box &a_thisTileBox) const noexcept
Inject the proper-nesting buffer into a level from the (classified) finer level.
Definition CD_TiledMeshRefine.cpp:224
IntVect decodeSuper(const std::uint64_t a_key) const noexcept
Unpack a 64-bit super-tile key into a super-tile index.
Definition CD_TiledMeshRefine.cpp:80
int subIndex(const IntVect &a_sub) const noexcept
Linear sub-tile index of a sub-position within a super-tile.
Definition CD_TiledMeshRefine.cpp:90
IntVect m_maxBlockSize
Maximum box size (in cells). Merge cap; a multiple of m_tileSize.
Definition CD_TiledMeshRefine.H:116
virtual ~TiledMeshRefine() noexcept
Destructor (does nothing)
Definition CD_TiledMeshRefine.cpp:60
virtual int regrid(Vector< Vector< Box > > &a_newGrids, const Vector< IntVectSet > &a_tagsLevel) const noexcept
Regrid using the tile clustering algorithm.
Definition CD_TiledMeshRefine.cpp:267
int m_bitmaskWords
Number of 64-bit words in a super-tile sub-occupancy bitmask.
Definition CD_TiledMeshRefine.H:131
IntVect m_superFactor
Number of min_block_size tiles per super-tile, per direction (= m_maxBlockSize / m_tileSize).
Definition CD_TiledMeshRefine.H:121
IntVect m_tileSize
Tile size (= minimum block size, in cells)
Definition CD_TiledMeshRefine.H:111
void packTiles(std::vector< IntVect > &a_tiles, const IntVect &a_maxTile, const IntVect &a_probLo, Vector< Box > &a_boxes) const noexcept
Pack a set of tiles into variable-sized (anisotropic) boxes via recursive Berger-Rigoutsos bisection....
Definition CD_TiledMeshRefine.cpp:420
long long m_superVol
Number of sub-tiles in a super-tile (the product of m_superFactor).
Definition CD_TiledMeshRefine.H:126
void gatherSuperTiles(SuperTiles &a_tiles) const noexcept
Gather the (per-rank-local) super-tile representation onto all ranks.
Definition CD_TiledMeshRefine.cpp:145
void classify(SuperTiles &a_tiles) const noexcept
Promote every partial super-tile whose bitmask is full to the full set.
Definition CD_TiledMeshRefine.cpp:126
Vector< ProblemDomain > m_amrDomains
Computational domains on each level.
Definition CD_TiledMeshRefine.H:101
TiledMeshRefine()=delete
Default constructor – deleted because we never need it.
Compact representation of one level's tiles over the super-tile grid.
Definition CD_TiledMeshRefine.H:89
std::unordered_map< std::uint64_t, std::vector< std::uint64_t > > m_partial
Partially-tagged super-tiles: key -> sub-tile occupancy bitmask.
Definition CD_TiledMeshRefine.H:94
std::unordered_set< std::uint64_t > m_full
Keys of fully-tagged super-tiles.
Definition CD_TiledMeshRefine.H:91