#include "fourier.h"namespace mimas {template<>void dft_< float >::operator()( int rank, const int *n,const std::complex< float > *in,std::complex< float > *out, int sign ){fftwf_plan plan =fftwf_plan_dft( rank, n, (fftwf_complex *)in, (fftwf_complex *)out,sign, FFTW_ESTIMATE | FFTW_PRESERVE_INPUT );assert( plan != NULL );fftwf_execute( plan );fftwf_destroy_plan( plan );}template<>void dft_< double >::operator()( int rank, const int *n,const std::complex< double > *in,std::complex< double > *out, int sign ){fftw_plan plan =fftw_plan_dft( rank, n, (fftw_complex *)in, (fftw_complex *)out,sign, FFTW_ESTIMATE | FFTW_PRESERVE_INPUT );assert( plan != NULL );fftw_execute( plan );fftw_destroy_plan( plan );}template<>void dft_r2c_< float >::operator()( int rank, const int *n,const float *in,std::complex< float > *out ){fftwf_plan plan =fftwf_plan_dft_r2c( rank, n, (float *)in, (fftwf_complex *)out,FFTW_ESTIMATE | FFTW_PRESERVE_INPUT );assert( plan != NULL );fftwf_execute( plan );fftwf_destroy_plan( plan );}template<>void dft_r2c_< double >::operator()( int rank, const int *n,const double *in,std::complex< double > *out ){assert( sizeof( std::complex< double > ) == sizeof( fftw_complex ) );fftw_plan plan =fftw_plan_dft_r2c( rank, n, (double *)in, (fftw_complex *)out,FFTW_ESTIMATE | FFTW_PRESERVE_INPUT );assert( plan != NULL );fftw_execute( plan );fftw_destroy_plan( plan );}template<>void dft_c2r_< float >::operator()( int rank, const int *n,const std::complex< float > *in,float *out ){assert( sizeof( std::complex< float > ) == sizeof( fftwf_complex ) );fftwf_plan plan =fftwf_plan_dft_c2r( rank, n, (fftwf_complex *)in, (float *)out,FFTW_ESTIMATE );// FFTW_PRESERVE_INPUTassert( plan != NULL );fftwf_execute( plan );fftwf_destroy_plan( plan );}template<>void dft_c2r_< double >::operator()( int rank, const int *n,const std::complex< double > *in,double *out ){assert( sizeof( std::complex< double > ) == sizeof( fftw_complex ) );fftw_plan plan =fftw_plan_dft_c2r( rank, n, (fftw_complex *)in, (double *)out,FFTW_ESTIMATE );// FFTW_PRESERVE_INPUTassert( plan != NULL );fftw_execute( plan );fftw_destroy_plan( plan );}};