core 1.5.0
Shared MPI block decomposition, asynchronous ghost-layer exchange, SDF geometry, load balancing (header-only C++20)
Loading...
Searching...
No Matches
stage_target.hpp File Reference
#include <cstddef>
#include <limits>
#include <optional>
#include <stdexcept>
#include <type_traits>
#include <utility>
#include <vector>
#include "peclet/core/common/types.hpp"
#include "peclet/core/decomp/block_decomposer.hpp"

Go to the source code of this file.

Classes

struct  peclet::core::decomp::StageTarget< Dim >
 Where a level goes: the result of chooseStageTarget / repartitionTarget. More...
 
struct  peclet::core::decomp::SiblingMergeChoice< Dim >
 A sibling merge the search chose: the tree depth it truncates at, the merged decomposition, and its maps (agglomerated(depth, &groupOf, &ownerOf)). More...
 

Namespaces

namespace  peclet
 
namespace  peclet::core
 
namespace  peclet::core::decomp
 

Enumerations

enum class  peclet::core::decomp::StageKind { peclet::core::decomp::InPlace , peclet::core::decomp::SiblingMerge , peclet::core::decomp::Repartition , peclet::core::decomp::Replicated }
 How a multigrid level moves when it can no longer coarsen in place (see chooseStageTarget and the file comment for the movement each kind implies). More...
 

Functions

template<int Dim>
Index peclet::core::decomp::minBlockExtent (const BlockDecomposer< Dim > &d)
 Smallest block extent over every block and axis โ€” replicated, like the decomposition.
 
template<int Dim>
Index peclet::core::decomp::largestBlockCells (const BlockDecomposer< Dim > &d)
 Cell count of the largest block โ€” replicated, like the decomposition.
 
template<int Dim, class Liftable >
std::optional< SiblingMergeChoice< Dim > > peclet::core::decomp::shallowestLiftableMerge (const BlockDecomposer< Dim > &cur, Liftable &&liftable, int minExtent)
 The sibling-merge SEARCH on its own, with no trigger: the shallowest merge โ€” fewest merges, i.e.
 
template<int Dim, class Liftable >
std::optional< StageTarget< Dim > > peclet::core::decomp::repartitionTarget (const BlockDecomposer< Dim > &cur, const std::type_identity_t< IVec< Dim > > &levelGrid, Liftable &&liftable, int minExtent, Index maxBlockCells)
 The Repartition candidate (design ยง11.2): a fresh proportional, unweighted, unaligned ORB of the level grid on the first np_L parent ranks, or std::nullopt when none lifts.
 
template<int Dim, class Liftable >
StageTarget< Dim > peclet::core::decomp::chooseStageTarget (const BlockDecomposer< Dim > &cur, const std::type_identity_t< IVec< Dim > > &levelGrid, Liftable &&liftable, int minExtent, Index maxBlockCells=0)
 Choose the stage target of a level whose current decomposition is cur over the level grid levelGrid (which must equal cur.globalSize()).