From 26ef94eb73ab71402e1ec209220f513e00fd75d0 Mon Sep 17 00:00:00 2001 From: Cristian Lalescu <Cristian.Lalescu@ds.mpg.de> Date: Wed, 17 Jun 2015 13:44:58 +0200 Subject: [PATCH] test_field_descriptor compiles --- src/Morton_shuffler.cpp | 8 ++++---- src/Morton_shuffler.hpp | 8 ++++---- src/fftwf_tools.cpp | 14 +++++++------- src/fftwf_tools.hpp | 10 +++++----- src/field_descriptor.cpp | 2 ++ src/field_descriptor.hpp | 14 -------------- src/p3DFFT_to_iR.cpp | 6 +++--- src/p3DFFT_to_iR.hpp | 8 ++++---- 8 files changed, 29 insertions(+), 41 deletions(-) diff --git a/src/Morton_shuffler.cpp b/src/Morton_shuffler.cpp index c351c1a7..99c4f73f 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 5aefc8a3..4c6d3444 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 5135a795..a1b65f94 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 0867c64b..1e922ab9 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 20a399a0..2b7e2796 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 4197cb01..dccbdd8f 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 fd2960f7..a8d85242 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 93a47c1a..a04ec0b1 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 -- GitLab