From 00f9a47c70afd849a276e7de2c10e6d2681edec2 Mon Sep 17 00:00:00 2001 From: Berenger Bramas <berenger.bramas@mpcdf.mpg.de> Date: Fri, 29 Sep 2017 16:18:14 +0200 Subject: [PATCH] Initialize allocated memory and use local1 for complex --- bfps/cpp/fftw_interface.hpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/bfps/cpp/fftw_interface.hpp b/bfps/cpp/fftw_interface.hpp index 682850c8..7d56d336 100644 --- a/bfps/cpp/fftw_interface.hpp +++ b/bfps/cpp/fftw_interface.hpp @@ -41,6 +41,7 @@ #include <memory> #include <algorithm> #include <cassert> +#include <cstring> #endif template <class realtype> @@ -171,6 +172,7 @@ public: sizeBuffer *= n[rnk-1]+2; c2r_plan.buffer.reset(alloc_real(sizeBuffer)); + memset(c2r_plan.buffer.get(), 0, sizeof(real)*sizeBuffer); // Init the plan c2r_plan.plan_to_use = mpi_plan_dft_c2r(rnk, n, (complex*)c2r_plan.buffer.get(), @@ -178,7 +180,7 @@ public: comm, flags); c2r_plan.nb_real_to_copy = c2r_plan.local_n0/howmany; - c2r_plan.nb_complex_to_copy = c2r_plan.local_n0/howmany; + c2r_plan.nb_complex_to_copy = c2r_plan.local_n1/howmany; for(int idxrnk = 1 ; idxrnk < rnk-1 ; ++idxrnk){ c2r_plan.nb_real_to_copy *= n[idxrnk]; c2r_plan.nb_complex_to_copy *= n[idxrnk]; @@ -229,6 +231,7 @@ public: sizeBuffer *= n[rnk-1]+2; r2c_plan.buffer.reset(alloc_real(sizeBuffer)); + memset(r2c_plan.buffer.get(), 0, sizeof(real)*sizeBuffer); // Init the plan r2c_plan.plan_to_use = mpi_plan_dft_r2c(rnk, n, r2c_plan.buffer.get(), @@ -237,7 +240,7 @@ public: r2c_plan.nb_real_to_copy = r2c_plan.local_n0/howmany; - r2c_plan.nb_complex_to_copy = r2c_plan.local_n0/howmany; + r2c_plan.nb_complex_to_copy = r2c_plan.local_n1/howmany; for(int idxrnk = 1 ; idxrnk < rnk-1 ; ++idxrnk){ r2c_plan.nb_real_to_copy *= n[idxrnk]; r2c_plan.nb_complex_to_copy *= n[idxrnk]; @@ -452,6 +455,7 @@ public: sizeBuffer *= n[rnk-1]+2; c2r_plan.buffer.reset(alloc_real(sizeBuffer)); + memset(c2r_plan.buffer.get(), 0, sizeof(real)*sizeBuffer); // Init the plan c2r_plan.plan_to_use = mpi_plan_dft_c2r(rnk, n, (complex*)c2r_plan.buffer.get(), @@ -459,7 +463,7 @@ public: comm, flags); c2r_plan.nb_real_to_copy = c2r_plan.local_n0/howmany; - c2r_plan.nb_complex_to_copy = c2r_plan.local_n0/howmany; + c2r_plan.nb_complex_to_copy = c2r_plan.local_n1/howmany; for(int idxrnk = 1 ; idxrnk < rnk-1 ; ++idxrnk){ c2r_plan.nb_real_to_copy *= n[idxrnk]; c2r_plan.nb_complex_to_copy *= n[idxrnk]; @@ -510,6 +514,7 @@ public: sizeBuffer *= n[rnk-1]+2; r2c_plan.buffer.reset(alloc_real(sizeBuffer)); + memset(r2c_plan.buffer.get(), 0, sizeof(real)*sizeBuffer); // Init the plan r2c_plan.plan_to_use = mpi_plan_dft_r2c(rnk, n, r2c_plan.buffer.get(), @@ -518,7 +523,7 @@ public: r2c_plan.nb_real_to_copy = r2c_plan.local_n0/howmany; - r2c_plan.nb_complex_to_copy = r2c_plan.local_n0/howmany; + r2c_plan.nb_complex_to_copy = r2c_plan.local_n1/howmany; for(int idxrnk = 1 ; idxrnk < rnk-1 ; ++idxrnk){ r2c_plan.nb_real_to_copy *= n[idxrnk]; r2c_plan.nb_complex_to_copy *= n[idxrnk]; -- GitLab