chombo-discharge
Loading...
Searching...
No Matches
CD_LoadBalancing.H
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2021-2026 SINTEF Energy Research
3 *
4 * SPDX-License-Identifier: GPL-3.0-or-later
5 */
6
13#ifndef CD_LOADBALANCING_H
14#define CD_LOADBALANCING_H
15
16// Std includes
17#include <cstdint>
18
19// Our includes
21#include <CD_BoxSorting.H>
22#include <CD_Loads.H>
23#include <CD_NamespaceHeader.H>
24
29{
30public:
39 template <class T>
40 static void
41 makeBalance(Vector<int>& a_ranks, const Vector<T>& a_loads, const Vector<Box>& a_boxes);
42
52 template <class T>
53 static void
54 makeBalance(Vector<int>& a_ranks, Loads& a_rankLoads, const Vector<T>& a_boxLoads, const Vector<Box>& a_boxes);
55
62 template <typename T>
63 static void
64 sort(Vector<Vector<Box>>& a_boxes, Vector<Vector<T>>& a_loads, const BoxSorting a_whichSorting);
65
72 template <typename T>
73 static void
74 sort(Vector<Box>& a_boxes, Vector<T>& a_loads, const BoxSorting a_which);
75
81 static void
82 sort(Vector<Box>& a_boxes, const BoxSorting a_which);
83
88 static void
89 gatherBoxes(Vector<Box>& a_boxes);
90
95 static void
96 gatherLoads(Vector<Real>& a_loads);
97
102 static void
103 gatherLoads(Vector<int>& a_loads);
104
109 static void
110 gatherLoads(Vector<long>& a_loads);
111
117 static void
118 gatherBoxesAndLoads(Vector<Box>& a_boxes, Vector<int>& a_loads);
119
120protected:
127 template <class T>
128 static std::vector<std::pair<Box, T>>
129 packPairs(const Vector<Box>& a_boxes, const Vector<T>& a_loads);
130
137 template <class T>
138 static void
139 unpackPairs(Vector<Box>& a_boxes, Vector<T>& a_loads, const std::vector<std::pair<Box, T>>& a_pairs);
140
147 template <class T>
148 static void
149 standardSort(Vector<Box>& a_boxes, Vector<T>& a_loads);
150
157 template <class T>
158 static void
159 shuffleSort(Vector<Box>& a_boxes, Vector<T>& a_loads);
160
167 template <class T, int DIM>
168 static void
169 sortSFC(Vector<Box>& a_boxes,
170 Vector<T>& a_loads,
171 const std::function<uint64_t(const std::array<uint32_t, DIM>)>& a_sfcEncoder) noexcept;
172
173public:
179 template <int DIM>
180 static uint64_t
181 mortonIndex(const std::array<uint32_t, DIM>& a_coords) noexcept;
182
188 template <int DIM>
189 static uint64_t
190 hilbertIndex(const std::array<uint32_t, DIM>& a_coords);
191};
192
193#include <CD_NamespaceFooter.H>
194
196
197#endif
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.
Multi-fluid index space.
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