aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Carpet/src/Recompose.cc
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@cct.lsu.edu>2011-08-10 11:13:04 -0400
committerErik Schnetter <schnetter@cct.lsu.edu>2011-08-10 11:13:04 -0400
commitcc4d3c7bcf9663bb2e0b5c96edf3fec493e94775 (patch)
tree17b1e75b084f7dd145dae9c548b92598c5708d57 /Carpet/Carpet/src/Recompose.cc
parent6f9e7f8311ac971f79bca74563873a956b4a9ddf (diff)
Carpet: New parameter to set granularity for domain decomposition
Add new parameters Carpet::granularity and Carpet::granularity_boundary to choose a certain granularity for the process decomposition.
Diffstat (limited to 'Carpet/Carpet/src/Recompose.cc')
-rw-r--r--Carpet/Carpet/src/Recompose.cc12
1 files changed, 11 insertions, 1 deletions
diff --git a/Carpet/Carpet/src/Recompose.cc b/Carpet/Carpet/src/Recompose.cc
index 8e4e53a27..c44172e23 100644
--- a/Carpet/Carpet/src/Recompose.cc
+++ b/Carpet/Carpet/src/Recompose.cc
@@ -1503,6 +1503,10 @@ namespace Carpet {
vector<int> mynpoints(nslices);
int const npoints =
(superreg.extent.shape() / superreg.extent.stride())[mydim];
+ int const npoints_bnd_lo =
+ superreg.outer_boundaries[0][mydim] ? granularity_boundary : 0;
+ int const npoints_bnd_hi =
+ superreg.outer_boundaries[1][mydim] ? granularity_boundary : 0;
// Keep track of how many points and processors we have left to
// distribute
@@ -1512,7 +1516,13 @@ namespace Carpet {
assert (nprocs_left > 0);
CCTK_REAL const npoints1 =
CCTK_REAL(1) * npoints_left * mynprocs.AT(n) / nprocs_left;
- mynpoints.AT(n) = int (floor (npoints1 + CCTK_REAL(0.5)));
+ mynpoints.AT(n) =
+ int (floor (npoints1 / granularity + CCTK_REAL(0.5))) * granularity;
+ if (n == 0)
+ mynpoints.AT(n) += npoints_bnd_lo;
+ if (npoints_left - mynpoints.AT(n) <= npoints_bnd_hi)
+ mynpoints.AT(n) += npoints_bnd_hi;
+ mynpoints.AT(n) = min(npoints_left, mynpoints.AT(n));
assert (mynpoints.AT(n) >= 0 and mynpoints.AT(n) <= npoints_left);
npoints_left -= mynpoints.AT(n);
nprocs_left -= mynprocs.AT(n);