16 const std::array<bool, Dim>& isParallel,
int nSplits)
const {
20 std::vector<NDIndex_t> domains_c(nSplits);
24 domains_c[0] = domain;
28 int v1, v2, rm, vtot, vl, vr;
31 for (v = nSplits, rm = 0; v > 1; v /= 2) {
38 std::vector<NDIndex_t> copy_c(nSplits);
40 for (v = 1; v < nSplits; v *= 2) {
42 while (!isParallel[d])
48 for (i = 0, j = 0; i < v; ++i, j += 2) {
50 domains_c[i].split(copy_c[j], copy_c[j + 1], d);
53 std::copy(copy_c.begin(), copy_c.begin() + v * 2, domains_c.begin());
73 for (v = 1; v < 2 * nSplits; ++v) {
75 for (v2 = v, v1 = 1; v2 > 1; v2 /= 2) {
76 v1 = 2 * v1 + (v2 % 2);
83 vl = vl + (vr - vl) / 2;
85 vr = vl + (vr - vl) / 2;
90 v2 = vl + (vr - vl) / 2;
96 leftDomain = domains_c[vl];
98 d = std::numeric_limits<unsigned int>::max();
99 for (
unsigned int dd = 0; dd <
Dim; ++dd) {
100 if (isParallel[dd]) {
101 if ((len = leftDomain[dd].length()) > lmax) {
108 domains_c[vl].split(temp, domains_c[vr], d, a);
109 domains_c[vl] = temp;
120 for (
size_t i = 0; i < domains_c.size(); ++i) {
121 view(i) = domains_c[i];