diff --git a/src/Morton_shuffler.cpp b/src/Morton_shuffler.cpp index c351c1a71c9b12e1856ec8d5e758cce96dcc7cd0..99c4f73f74ef45fe244003def4312080f154d207 100644 --- a/src/Morton_shuffler.cpp +++ b/src/Morton_shuffler.cpp @@ -53,15 +53,15 @@ Morton_shuffler::Morton_shuffler( n[1] = N1; n[2] = N2; n[3] = this->d; - this->dinput = new field_descriptor(4, n, MPI_FLOAT, MPI_COMM_WORLD); + this->dinput = new field_descriptor<float>(4, n, MPI_FLOAT, MPI_COMM_WORLD); n[0] = N0/8; n[1] = N1/8; n[2] = N2/8; n[3] = 8*8*8*this->d; - this->drcubbie = new field_descriptor(4, n, MPI_FLOAT, MPI_COMM_WORLD); + this->drcubbie = new field_descriptor<float>(4, n, MPI_FLOAT, MPI_COMM_WORLD); n[0] = (N0/8) * (N1/8) * (N2/8); n[1] = 8*8*8*this->d; - this->dzcubbie = new field_descriptor(2, n, MPI_FLOAT, MPI_COMM_WORLD); + this->dzcubbie = new field_descriptor<float>(2, n, MPI_FLOAT, MPI_COMM_WORLD); //set up output file descriptor int out_rank, out_nprocs; @@ -78,7 +78,7 @@ Morton_shuffler::Morton_shuffler( n[0] = ((N0/8) * (N1/8) * (N2/8)) / nfiles; n[1] = 8*8*8*this->d; MPI_Comm_split(MPI_COMM_WORLD, this->out_group, out_rank, &this->out_communicator); - this->doutput = new field_descriptor(2, n, MPI_FLOAT, this->out_communicator); + this->doutput = new field_descriptor<float>(2, n, MPI_FLOAT, this->out_communicator); } Morton_shuffler::~Morton_shuffler() diff --git a/src/Morton_shuffler.hpp b/src/Morton_shuffler.hpp index 5aefc8a32c0e6f4f3da5e1619ef51aa72b26d7d0..4c6d3444dc3e55543fb968c3d9ae2105f448c321 100644 --- a/src/Morton_shuffler.hpp +++ b/src/Morton_shuffler.hpp @@ -72,13 +72,13 @@ class Morton_shuffler /* members */ int d; // number of components of the field // descriptor for N0 x N1 x N2 x d - field_descriptor *dinput; + field_descriptor<float> *dinput; // descriptor for (N0/8) x (N1/8) x (N2/8) x 8 x 8 x 8 x d - field_descriptor *drcubbie; + field_descriptor<float> *drcubbie; // descriptor for NZ x 8 x 8 x 8 x d - field_descriptor *dzcubbie; + field_descriptor<float> *dzcubbie; // descriptor for (NZ/nfiles) x 8 x 8 x 8 x d - field_descriptor *doutput; + field_descriptor<float> *doutput; // communicator to use for output MPI_Comm out_communicator; diff --git a/src/fftwf_tools.cpp b/src/fftwf_tools.cpp index 5135a7959e4a9278d36cc4a3f611a396712e7b63..a1b65f94212919e88f720e55524a7666848bc4ab 100644 --- a/src/fftwf_tools.cpp +++ b/src/fftwf_tools.cpp @@ -28,9 +28,9 @@ // should I use a template here? int fftwf_copy_complex_array( - field_descriptor *fi, + field_descriptor<float> *fi, fftwf_complex *ai, - field_descriptor *fo, + field_descriptor<float> *fo, fftwf_complex *ao) { if (((fi->ndims != 3) || @@ -135,7 +135,7 @@ int fftwf_copy_complex_array( } int fftwf_clip_zero_padding( - field_descriptor *f, + field_descriptor<float> *f, float *a, int howmany) { @@ -156,18 +156,18 @@ int fftwf_clip_zero_padding( int fftwf_get_descriptors_3D( int n0, int n1, int n2, - field_descriptor **fr, - field_descriptor **fc) + field_descriptor<float> **fr, + field_descriptor<float> **fc) { int ntmp[3]; ntmp[0] = n0; ntmp[1] = n1; ntmp[2] = n2; - *fr = new field_descriptor(3, ntmp, MPI_FLOAT, MPI_COMM_WORLD); + *fr = new field_descriptor<float>(3, ntmp, MPI_FLOAT, MPI_COMM_WORLD); ntmp[0] = n0; ntmp[1] = n1; ntmp[2] = n2/2+1; - *fc = new field_descriptor(3, ntmp, MPI_COMPLEX8, MPI_COMM_WORLD); + *fc = new field_descriptor<float>(3, ntmp, MPI_COMPLEX8, MPI_COMM_WORLD); return EXIT_SUCCESS; } diff --git a/src/fftwf_tools.hpp b/src/fftwf_tools.hpp index 0867c64b36e189686f3de04c9856405ddcf6d847..1e922ab99130910d5201718efc9c4d1ee5ee96f0 100644 --- a/src/fftwf_tools.hpp +++ b/src/fftwf_tools.hpp @@ -34,13 +34,13 @@ extern int myrank, nprocs; * the arrays are assumed to use 3D mpi fftw layout. * */ int fftwf_copy_complex_array( - field_descriptor *fi, + field_descriptor<float> *fi, fftwf_complex *ai, - field_descriptor *fo, + field_descriptor<float> *fo, fftwf_complex *ao); int fftwf_clip_zero_padding( - field_descriptor *f, + field_descriptor<float> *f, float *a, int howmany=1); @@ -54,8 +54,8 @@ int fftwf_clip_zero_padding( * */ int fftwf_get_descriptors_3D( int n0, int n1, int n2, - field_descriptor **fr, - field_descriptor **fc); + field_descriptor<float> **fr, + field_descriptor<float> **fc); #endif//FFTWF_TOOLS diff --git a/src/field_descriptor.cpp b/src/field_descriptor.cpp index 20a399a0b2c24bd969a0a1fe86a151ccd0a33f0d..2b7e2796db966057fb5cdea21610d73e568a1c44 100644 --- a/src/field_descriptor.cpp +++ b/src/field_descriptor.cpp @@ -482,3 +482,5 @@ field_descriptor<float>* field_descriptor<float>::get_transpose() return new field_descriptor<float>(this->ndims, n, this->mpi_dtype, this->comm); } +template class field_descriptor<float>; + diff --git a/src/field_descriptor.hpp b/src/field_descriptor.hpp index 4197cb01b0c258435b012cc27d5f019a041cad28..dccbdd8fc81c03acb3ed3a4efb8c139a7a5b9519 100644 --- a/src/field_descriptor.hpp +++ b/src/field_descriptor.hpp @@ -95,20 +95,6 @@ class field_descriptor }; -/* given two arrays of the same dimension, we do simple resizes in - * Fourier space: either chop off high modes, or pad with zeros. - * the arrays are assumed to use fftw layout. - * */ -int fftwf_copy_complex_array( - field_descriptor<float> *fi, - fftwf_complex *ai, - field_descriptor<float> *fo, - fftwf_complex *ao); - -int fftwf_clip_zero_padding( - field_descriptor<float> *f, - float *a); - inline float btle(const float be) { float le; diff --git a/src/p3DFFT_to_iR.cpp b/src/p3DFFT_to_iR.cpp index fd2960f7dd92546127ef6f1f1a0c168c7b341fde..a8d852428de3fa594639cdff0365d63ed7c2efd3 100644 --- a/src/p3DFFT_to_iR.cpp +++ b/src/p3DFFT_to_iR.cpp @@ -52,7 +52,7 @@ p3DFFT_to_iR::p3DFFT_to_iR( // (which is generally an even number) n[0] = n0*n1; n[1] = n2; - this->f0c = new field_descriptor(2, n, MPI_COMPLEX8, MPI_COMM_WORLD); + this->f0c = new field_descriptor<float>(2, n, MPI_COMPLEX8, MPI_COMM_WORLD); // f1c will be pointing at the input array after it has been // transposed in 2D, therefore we have this correspondence: @@ -60,13 +60,13 @@ p3DFFT_to_iR::p3DFFT_to_iR( n[0] = n2; n[1] = n0; n[2] = n1; - this->f1c = new field_descriptor(3, n, MPI_COMPLEX8, MPI_COMM_WORLD); + this->f1c = new field_descriptor<float>(3, n, MPI_COMPLEX8, MPI_COMM_WORLD); // the description for the fully transposed field n[0] = n2; n[1] = n1; n[2] = n0; - this->f2c = new field_descriptor(3, n, MPI_COMPLEX8, MPI_COMM_WORLD); + this->f2c = new field_descriptor<float>(3, n, MPI_COMPLEX8, MPI_COMM_WORLD); // following 3 arguments are dimensions for real space grid dimensions // f3r and f3c will be allocated in this call diff --git a/src/p3DFFT_to_iR.hpp b/src/p3DFFT_to_iR.hpp index 93a47c1a665d042686fb4330b0d7ca6725aa62e0..a04ec0b109dcc3aa8f08a81088ae32c92cd05a7a 100644 --- a/src/p3DFFT_to_iR.hpp +++ b/src/p3DFFT_to_iR.hpp @@ -41,10 +41,10 @@ class p3DFFT_to_iR public: /* members */ int howmany; - field_descriptor *f0c; // descriptor for 2D input - field_descriptor *f1c; // descriptor for 2D transposed input - field_descriptor *f2c; // descriptor for 3D fully transposed input - field_descriptor *f3c, *f3r; // descriptors for FFT + field_descriptor<float> *f0c; // descriptor for 2D input + field_descriptor<float> *f1c; // descriptor for 2D transposed input + field_descriptor<float> *f2c; // descriptor for 3D fully transposed input + field_descriptor<float> *f3c, *f3r; // descriptors for FFT fftwf_complex *c12; // array to store transposed input fftwf_complex *c3 ; // array to store resized Fourier data