Add support for c2c

This commit is contained in:
Guilhem Lavaux 2019-07-17 17:30:13 +02:00
parent df29233852
commit 81aab54937
3 changed files with 18 additions and 10 deletions

View File

@ -65,10 +65,10 @@ namespace CosmoTool
return 1/SPowerBase<-N>::spower(a); return 1/SPowerBase<-N>::spower(a);
} }
if ((N%2)==0) if ((N%2)==0)
{ {
T b = SPowerBase<N/2>::spower(a); T b = SPowerBase<N/2>::spower(a);
return b*b; return b*b;
} }
T b = SPowerBase<(N-1)/2>::spower(a); T b = SPowerBase<(N-1)/2>::spower(a);
return a*b*b; return a*b*b;
} }

View File

@ -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_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<real_type> *out) { prefix ## _execute_dft_r2c(p, in, (complex_type*)out); } \ static void execute_r2c(plan_type p, real_type *in, std::complex<real_type> *out) { prefix ## _execute_dft_r2c(p, in, (complex_type*)out); } \
static void execute_c2r(plan_type p, std::complex<real_type> *in, real_type *out) { prefix ## _execute_dft_c2r(p, (complex_type*) in, out); } \ static void execute_c2r(plan_type p, std::complex<real_type> *in, real_type *out) { prefix ## _execute_dft_c2r(p, (complex_type*) in, out); } \
static void execute_c2c(plan_type p, std::complex<real_type> *in, std::complex<real_type> *out) { prefix ## _execute_dft(p, (complex_type *)in, (complex_type*)out); } \
static plan_type plan_dft_r2c_2d(int Nx, int Ny, \ static plan_type plan_dft_r2c_2d(int Nx, int Ny, \
real_type *in, complex_type *out, \ real_type *in, complex_type *out, \
unsigned flags) \ unsigned flags) \
@ -110,6 +111,9 @@ public: \
{ \ { \
return prefix ## _plan_dft_c2r(rank, n, in, out, flags); \ 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); } \ static void destroy_plan(plan_type plan) { prefix ## _destroy_plan(plan); } \
} }

View File

@ -49,6 +49,7 @@ public: \
} \ } \
\ \
static void execute(plan_type p) { prefix ## _execute(p); } \ 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_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<real_type> *in, real_type *out) { prefix ## _mpi_execute_dft_c2r(p, (complex_type*)in, out); } \ static void execute_c2r(plan_type p, std::complex<real_type> *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); } \ 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); \ 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); } \ static void destroy_plan(plan_type plan) { prefix ## _destroy_plan(plan); } \
} }