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