diff --git a/src/field_descriptor.cpp b/src/field_descriptor.cpp index a11e81df97eedb3f233606e4cda32d12b2c64059..df101d1b75bd62d8bc7b5ecd00d5b0405bd34045 100644 --- a/src/field_descriptor.cpp +++ b/src/field_descriptor.cpp @@ -227,6 +227,17 @@ int field_descriptor::transpose( return EXIT_SUCCESS; } +int field_descriptor::interleave( + float *input, + float *output, + int dim) +{ + for (int k = 0; k < this->local_size; k++) + for (int j = 0; j < dim; j++) + output[k*dim + j] = input[j*this->local_size + k]; + return EXIT_SUCCESS; +} + field_descriptor* field_descriptor::get_transpose() { int n[this->ndims]; diff --git a/src/field_descriptor.hpp b/src/field_descriptor.hpp index b8e9c36c00cc8d09d4616613a47cbdbff2893fed..920920997019024f713a9262d061dfcb33c065a1 100644 --- a/src/field_descriptor.hpp +++ b/src/field_descriptor.hpp @@ -54,6 +54,11 @@ class field_descriptor fftwf_complex *input, fftwf_complex *output = NULL); + int interleave( + float *input, + float *output, + int dim); + inline int rank(int i0) { return i0 / this->subsizes[0];