13#ifndef CD_LOADBALANCING_H
14#define CD_LOADBALANCING_H
23#include <CD_NamespaceHeader.H>
41 makeBalance(Vector<int>& a_ranks,
const Vector<T>& a_loads,
const Vector<Box>& a_boxes);
54 makeBalance(Vector<int>& a_ranks,
Loads& a_rankLoads,
const Vector<T>& a_boxLoads,
const Vector<Box>& a_boxes);
64 sort(Vector<Vector<Box>>& a_boxes, Vector<Vector<T>>& a_loads,
const BoxSorting a_whichSorting);
74 sort(Vector<Box>& a_boxes, Vector<T>& a_loads,
const BoxSorting a_which);
128 static std::vector<std::pair<Box, T>>
129 packPairs(
const Vector<Box>& a_boxes,
const Vector<T>& a_loads);
139 unpackPairs(Vector<Box>& a_boxes, Vector<T>& a_loads,
const std::vector<std::pair<Box, T>>& a_pairs);
159 shuffleSort(Vector<Box>& a_boxes, Vector<T>& a_loads);
167 template <
class T,
int DIM>
171 const std::function<uint64_t(
const std::array<uint32_t, DIM>)>& a_sfcEncoder)
noexcept;
181 mortonIndex(
const std::array<uint32_t, DIM>& a_coords)
noexcept;
190 hilbertIndex(
const std::array<uint32_t, DIM>& a_coords);
193#include <CD_NamespaceFooter.H>
Declaration of an enum for identifying various ways of sorting grid patches.
BoxSorting
Enum for sorting boxes.
Definition CD_BoxSorting.H:22
Declaration of a simple class for holding computational loads.
Static class which contains various load balancing routines.
Definition CD_LoadBalancing.H:29
static uint64_t mortonIndex(const std::array< uint32_t, DIM > &a_coords) noexcept
Compute a Morton (Z-order) code from integer coordinates, using 21 bits per direction.
Definition CD_LoadBalancingImplem.H:362
static void gatherLoads(Vector< Real > &a_loads)
Gather computational loads.
Definition CD_LoadBalancing.cpp:111
static void gatherBoxes(Vector< Box > &a_boxes)
Gather boxes.
Definition CD_LoadBalancing.cpp:32
static void gatherBoxesAndLoads(Vector< Box > &a_boxes, Vector< int > &a_loads)
Gather boxes and loads.
Definition CD_LoadBalancing.cpp:271
static void makeBalance(Vector< int > &a_ranks, const Vector< T > &a_loads, const Vector< Box > &a_boxes)
Load balancing, assigning ranks to boxes.
Definition CD_LoadBalancingImplem.H:36
static uint64_t hilbertIndex(const std::array< uint32_t, DIM > &a_coords)
Compute a Hilbert-curve index from integer coordinates, using 21 bits per direction.
Definition CD_LoadBalancingImplem.H:389
static void standardSort(Vector< Box > &a_boxes, Vector< T > &a_loads)
Standard box sorting, calls C++ std::sort.
Definition CD_LoadBalancingImplem.H:276
static void sort(Vector< Vector< Box > > &a_boxes, Vector< Vector< T > > &a_loads, const BoxSorting a_whichSorting)
Sorts boxes and loads over a hierarchy according to some sorting criterion.
Definition CD_LoadBalancingImplem.H:227
static void unpackPairs(Vector< Box > &a_boxes, Vector< T > &a_loads, const std::vector< std::pair< Box, T > > &a_pairs)
Splits vector pair into separate boxes and loads.
Definition CD_LoadBalancingImplem.H:211
static void sortSFC(Vector< Box > &a_boxes, Vector< T > &a_loads, const std::function< uint64_t(const std::array< uint32_t, DIM >)> &a_sfcEncoder) noexcept
Generic SFC sorting function.
Definition CD_LoadBalancingImplem.H:314
static std::vector< std::pair< Box, T > > packPairs(const Vector< Box > &a_boxes, const Vector< T > &a_loads)
Utility function which packs boxes and loads into a vector of pairs.
Definition CD_LoadBalancingImplem.H:197
static void shuffleSort(Vector< Box > &a_boxes, Vector< T > &a_loads)
Randomly shuffles boxes and loads.
Definition CD_LoadBalancingImplem.H:292
Class for holding computational loads.
Definition CD_Loads.H:31