diff options
author | Erik Schnetter <schnetter@cct.lsu.edu> | 2011-08-10 11:13:04 -0400 |
---|---|---|
committer | Erik Schnetter <schnetter@cct.lsu.edu> | 2011-08-10 11:13:04 -0400 |
commit | cc4d3c7bcf9663bb2e0b5c96edf3fec493e94775 (patch) | |
tree | 17b1e75b084f7dd145dae9c548b92598c5708d57 /Carpet/Carpet/src/Recompose.cc | |
parent | 6f9e7f8311ac971f79bca74563873a956b4a9ddf (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.cc | 12 |
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); |