13 template <
unsigned Dim>
14 template <
typename view_type>
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];
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];
typename ippl::detail::ViewType< ippl::Vector< double, Dim >, 1 >::view_type view_type
Implementations for FFT constructor/destructor and transforms.
KOKKOS_INLINE_FUNCTION Vector< T, Dim > max(const Vector< T, Dim > &a, const Vector< T, Dim > &b)
void split(const NDIndex< Dim > &domain, view_type &view, const std::array< bool, Dim > &isParallel, int nSplits) const