aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Carpet/src/LoadBalanceReal
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@cct.lsu.edu>2011-11-22 13:47:41 -0500
committerBarry Wardell <barry.wardell@gmail.com>2011-12-14 19:55:01 +0000
commitbacf462840317b7a7d74809a639d474fba26e583 (patch)
tree21232c7635d282034a2085c3d68fa51c6d149cbf /Carpet/Carpet/src/LoadBalanceReal
parentaa7b8be416c812bf5575ee4c86c6f7b98fda0df2 (diff)
Carpet: Recursive load balancing: Renumber components
Add more self-checks. Number components sequentially and per-patch.
Diffstat (limited to 'Carpet/Carpet/src/LoadBalanceReal')
-rw-r--r--Carpet/Carpet/src/LoadBalanceReal/splitregions_recursively.cc15
1 files changed, 15 insertions, 0 deletions
diff --git a/Carpet/Carpet/src/LoadBalanceReal/splitregions_recursively.cc b/Carpet/Carpet/src/LoadBalanceReal/splitregions_recursively.cc
index ab6bfe3cd..49e619a1f 100644
--- a/Carpet/Carpet/src/LoadBalanceReal/splitregions_recursively.cc
+++ b/Carpet/Carpet/src/LoadBalanceReal/splitregions_recursively.cc
@@ -164,12 +164,16 @@ namespace Carpet {
if (recompose_verbose) cout << "SRMR enter" << endl;
int const nmaps = superregss.size();
+ assert (int(regss.size()) == nmaps);
int map_offset = 1000000000;
+ int max_map = 0;
for (int m=0; m<nmaps; ++m) {
for (int r=0; r<int(superregss.AT(m).size()); ++r) {
map_offset = min (map_offset, superregss.AT(m).AT(r).map);
+ max_map = max (max_map, superregss.AT(m).AT(r).map);
}
}
+ assert (max_map - map_offset == nmaps - 1);
int nsuperregs = 0;
for (int m=0; m<nmaps; ++m) {
@@ -272,6 +276,17 @@ namespace Carpet {
assert (m>=0 and m<nmaps);
superregss.AT(m).push_back (superregs.AT(r));
}
+ // Renumber components
+ for (int m=0; m<nmaps; ++m) {
+ int c=0;
+ for (size_t r=0; r<superregss.AT(m).size(); ++r) {
+ ipfulltree* const procs = superregss.AT(m).AT(r).processors;
+ assert (procs);
+ for (ipfulltree::iterator it (*procs); not it.done(); ++it) {
+ (*it).payload().component = c++;
+ }
+ }
+ }
for (int r=0; r<nregs; ++r) {
int const s = regs.AT(r).map;
assert (s>=0 and s<nsuperregs);