11#include <unsupported/Eigen/FFT>
14std::complex<T>
RandomCpx() {
return std::complex<T>( (
T)(rand()/(
T)RAND_MAX - .5), (
T)(rand()/(
T)RAND_MAX - .5) ); }
28 template <
typename VT1,
typename VT2>
29 long double fft_rmse(
const VT1 & fftbuf,
const VT2 & timebuf)
31 long double totalpower=0;
32 long double difpower=0;
33 long double pi =
acos((
long double)-1 );
34 for (
size_t k0=0;k0<(size_t)fftbuf.size();++k0) {
36 long double phinc = (
long double)(-2.)*k0* pi / timebuf.size();
37 for (
size_t k1=0;k1<(size_t)timebuf.size();++k1) {
46 cerr <<
"rmse:" << sqrt(difpower/totalpower) << endl;
47 return sqrt(difpower/totalpower);
50 template <
typename VT1,
typename VT2>
51 long double dif_rmse(
const VT1 buf1,
const VT2 buf2)
53 long double totalpower=0;
54 long double difpower=0;
55 size_t n = (
min)( buf1.size(),buf2.size() );
56 for (
size_t k=0;k<
n;++k) {
58 difpower += (
long double)(
numext::abs2(buf1[k] - buf2[k]));
60 return sqrt(difpower/totalpower);
65template<
int Container,
typename Scalar>
struct VectorType;
69 typedef vector<Scalar>
type;
77template <
int Container,
typename T>
80 typedef typename FFT<T>::Complex
Complex;
81 typedef typename FFT<T>::Scalar
Scalar;
86 ScalarVector tbuf(nfft);
87 ComplexVector freqBuf;
88 for (
int k=0;k<nfft;++k)
89 tbuf[k]= (
T)( rand()/(double)RAND_MAX - .5);
93 fft.SetFlag(fft.HalfSpectrum );
94 fft.fwd( freqBuf,tbuf);
95 VERIFY((
size_t)freqBuf.size() == (
size_t)( (nfft>>1)+1) );
98 fft.ClearFlag(fft.HalfSpectrum );
99 fft.fwd( freqBuf,tbuf);
100 VERIFY( (
size_t)freqBuf.size() == (
size_t)nfft);
107 fft.inv( tbuf2 , freqBuf);
113 fft.SetFlag(fft.Unscaled);
115 fft.inv( tbuf3 , freqBuf);
117 for (
int k=0;k<nfft;++k)
118 tbuf3[k] *=
T(1./nfft);
127 fft.ClearFlag(fft.Unscaled);
128 fft.inv( tbuf2 , freqBuf);
135 test_scalar_generic<StdVectorContainer,T>(nfft);
140template <
int Container,
typename T>
143 typedef typename FFT<T>::Complex
Complex;
148 ComplexVector inbuf(nfft);
149 ComplexVector outbuf;
151 for (
int k=0;k<nfft;++k)
152 inbuf[k]=
Complex( (
T)(rand()/(
double)RAND_MAX - .5), (
T)(rand()/(
double)RAND_MAX - .5) );
153 fft.fwd( outbuf , inbuf);
156 fft.inv( buf3 , outbuf);
162 fft.SetFlag(fft.Unscaled);
163 fft.inv( buf4 , outbuf);
164 for (
int k=0;k<nfft;++k)
165 buf4[k] *=
T(1./nfft);
169 fft.ClearFlag(fft.Unscaled);
170 fft.inv( buf3 , outbuf);
177 test_complex_generic<StdVectorContainer,T>(nfft);
178 test_complex_generic<EigenVectorContainer,T>(nfft);
219 fft.SetFlag(fft.HalfSpectrum );
247 #ifdef EIGEN_HAS_FFTWL
EIGEN_DEVICE_FUNC const AcosReturnType acos() const
Definition ArrayCwiseUnaryOps.h:297
int n
Definition BiCGSTAB_simple.cpp:1
void test_complex_generic(int nfft)
Definition FFTW.cpp:141
@ EigenVectorContainer
Definition FFTW.cpp:63
@ StdVectorContainer
Definition FFTW.cpp:63
complex< long double > promote(complex< T > x)
Definition FFTW.cpp:21
long double dif_rmse(const VT1 buf1, const VT2 buf2)
Definition FFTW.cpp:51
long double fft_rmse(const VT1 &fftbuf, const VT2 &timebuf)
Definition FFTW.cpp:29
void test_return_by_value(int len)
Definition FFTW.cpp:211
void test_scalar_generic(int nfft)
Definition FFTW.cpp:78
void test_complex(int nfft)
Definition FFTW.cpp:175
std::complex< T > RandomCpx()
Definition FFTW.cpp:14
Eigen::Triplet< double > T
Definition Tutorial_sparse_example.cpp:6
SCALAR Scalar
Definition bench_gemm.cpp:46
The matrix class, also used for vectors and row-vectors.
Definition Matrix.h:180
std::complex< RealScalar > Complex
Definition common.h:94
#define VERIFY(a)
Definition main.h:380
#define EIGEN_DECLARE_TEST(X)
Definition main.h:201
#define CALL_SUBTEST(FUNC)
Definition main.h:399
void test_scalar(const Device &sycl_device, IndexType m_size, IndexType k_size, IndexType n_size)
Definition cxx11_tensor_contract_sycl.cpp:257
#define min(a, b)
Definition datatypes.h:19
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
Definition gnuplot_common_settings.hh:12
EIGEN_DEVICE_FUNC bool abs2(bool x)
Definition MathFunctions.h:1292
Namespace containing all symbols from the Eigen library.
Definition bench_norm.cpp:85
float test_precision< float >()
Definition main.h:416
Matrix< Scalar, Dynamic, 1 > type
Definition FFTW.cpp:74
vector< Scalar > type
Definition FFTW.cpp:69
Definition datatypes.h:12