From 81aab549370879b293a6d568013a61c261dbdd3d Mon Sep 17 00:00:00 2001 From: Guilhem Lavaux Date: Wed, 17 Jul 2019 17:30:13 +0200 Subject: [PATCH] Add support for c2c --- src/algo.hpp | 20 ++++++++++---------- src/fourier/fft/fftw_calls.hpp | 4 ++++ src/fourier/fft/fftw_calls_mpi.hpp | 4 ++++ 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/algo.hpp b/src/algo.hpp index be03a77..5f896ef 100644 --- a/src/algo.hpp +++ b/src/algo.hpp @@ -7,16 +7,16 @@ This software is a computer program whose purpose is to provide a toolbox for co data analysis (e.g. filters, generalized Fourier transforms, power spectra, ...) This software is governed by the CeCILL license under French law and -abiding by the rules of distribution of free software. You can use, +abiding by the rules of distribution of free software. You can use, modify and/ or redistribute the software under the terms of the CeCILL license as circulated by CEA, CNRS and INRIA at the following URL -"http://www.cecill.info". +"http://www.cecill.info". As a counterpart to the access to the source code and rights to copy, modify and redistribute granted by the license, users are provided only with a limited warranty and the software's author, the holder of the economic rights, and the successive licensors have only limited -liability. +liability. In this respect, the user's attention is drawn to the risks associated with loading, using, modifying and/or developing or reproducing the @@ -25,9 +25,9 @@ that may mean that it is complicated to manipulate, and that also therefore means that it is reserved for developers and experienced professionals having in-depth computer knowledge. Users are therefore encouraged to load and test the software's suitability as regards their -requirements in conditions enabling the security of their systems and/or -data to be ensured and, more generally, to use and operate it in the -same conditions as regards security. +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. The fact that you are presently reading this means that you have had knowledge of the CeCILL license and that you accept its terms. @@ -65,10 +65,10 @@ namespace CosmoTool return 1/SPowerBase<-N>::spower(a); } if ((N%2)==0) - { - T b = SPowerBase::spower(a); - return b*b; - } + { + T b = SPowerBase::spower(a); + return b*b; + } T b = SPowerBase<(N-1)/2>::spower(a); return a*b*b; } diff --git a/src/fourier/fft/fftw_calls.hpp b/src/fourier/fft/fftw_calls.hpp index d3f2d10..16426cf 100644 --- a/src/fourier/fft/fftw_calls.hpp +++ b/src/fourier/fft/fftw_calls.hpp @@ -73,6 +73,7 @@ public: \ static void execute_c2r(plan_type p, complex_type *in, real_type *out) { prefix ## _execute_dft_c2r(p, in, out); } \ static void execute_r2c(plan_type p, real_type *in, std::complex *out) { prefix ## _execute_dft_r2c(p, in, (complex_type*)out); } \ static void execute_c2r(plan_type p, std::complex *in, real_type *out) { prefix ## _execute_dft_c2r(p, (complex_type*) in, out); } \ + static void execute_c2c(plan_type p, std::complex *in, std::complex *out) { prefix ## _execute_dft(p, (complex_type *)in, (complex_type*)out); } \ static plan_type plan_dft_r2c_2d(int Nx, int Ny, \ real_type *in, complex_type *out, \ unsigned flags) \ @@ -110,6 +111,9 @@ public: \ { \ return prefix ## _plan_dft_c2r(rank, n, in, out, flags); \ } \ + static plan_type plan_dft_3d(int Nx, int Ny, int Nz, complex_type *in, complex_type *out, int sign, unsigned flags) { \ + return prefix ## _plan_dft_3d(Nx, Ny, Nz, in, out, sign, flags); \ + } \ static void destroy_plan(plan_type plan) { prefix ## _destroy_plan(plan); } \ } diff --git a/src/fourier/fft/fftw_calls_mpi.hpp b/src/fourier/fft/fftw_calls_mpi.hpp index 7a4cf0c..eb12d88 100644 --- a/src/fourier/fft/fftw_calls_mpi.hpp +++ b/src/fourier/fft/fftw_calls_mpi.hpp @@ -49,6 +49,7 @@ public: \ } \ \ static void execute(plan_type p) { prefix ## _execute(p); } \ + static void execute_c2c(plan_type p, complex_type *in, complex_type *out) { prefix ## _mpi_execute_dft(p, in, out); } \ static void execute_r2c(plan_type p, real_type *in, complex_type *out) { prefix ## _mpi_execute_dft_r2c(p, in, out); } \ static void execute_c2r(plan_type p, std::complex *in, real_type *out) { prefix ## _mpi_execute_dft_c2r(p, (complex_type*)in, out); } \ static void execute_c2r(plan_type p, complex_type *in, real_type *out) { prefix ## _mpi_execute_dft_c2r(p, in, out); } \ @@ -92,6 +93,9 @@ public: \ { \ return prefix ## _mpi_plan_dft_c2r(rank, n, in, out, comm, flags); \ } \ + static plan_type plan_dft_3d(int Nx, int Ny, int Nz, complex_type *in, complex_type *out, MPI_Comm comm, int sign, unsigned flags) { \ + return prefix ## _mpi_plan_dft_3d(Nx, Ny, Nz, in, out, comm, sign, flags); \ + } \ static void destroy_plan(plan_type plan) { prefix ## _destroy_plan(plan); } \ }