15 #ifndef __gfftpolicy_h
16 #define __gfftpolicy_h
32 typedef unsigned int id_t;
44 virtual void fft(T*) = 0;
49 class AbstractFFT_oop {
51 virtual void fft(
const T*, T*) = 0;
52 virtual ~AbstractFFT_oop() {}
74 static const id_t ID = 0;
75 typedef double ValueType;
77 static const int Accuracy = 2;
79 static const int Accuracy = 4;
87 static const id_t ID = 1;
88 typedef float ValueType;
90 static const int Accuracy = 1;
92 static const int Accuracy = 2;
100 static const id_t ID = 2;
101 typedef std::complex<double> ValueType;
103 static const int Accuracy = 2;
105 static const int Accuracy = 4;
113 static const id_t ID = 3;
114 typedef std::complex<float> ValueType;
116 static const int Accuracy = 1;
118 static const int Accuracy = 2;
126 static const id_t ID = 0;
127 template<int_t N,
typename NFact,
typename T,
128 class Swap,
class Direction, short_t NT,
class W1>
133 typedef TYPELIST_3(Swap,InT,Direction) Result;
138 static const id_t ID = 0;
139 template<int_t N,
typename NFact,
typename T,
140 class Swap,
class Direction, short_t NT,
class W1>
143 typedef InTimeOOP_OMP<NT,N,NFact,T,Direction::Sign,W1> InT;
145 typedef TYPELIST_3(Swap,InT,Direction) Result;
153 static const id_t ID = 1;
154 template<int_t N,
typename NFact,
typename T,
155 class Swap,
class Direction, short_t NT,
class W1>
160 typedef TYPELIST_3(InF,Swap,Direction) Result;
168 static const id_t ID = 0;
173 template<int_t N,
typename NFact,
typename T,
174 class Swap,
class Direction, short_t NT,
class W1>
176 typedef typename INTIME::template List<N,NFact,T,Swap,Direction,NT,W1>::Result Result;
184 static const id_t ID = 1;
187 typedef AbstractFFT_oop<T> Result;
189 template<int_t N,
typename NFact,
typename T,
190 class Swap,
class Direction, short_t NT,
class W1>
192 typedef typename INTIME_OOP::template List<N,NFact,T,Swap,Direction,NT,W1>::Result Result;
203 static const id_t ID = 0;
206 template<
unsigned long N,
typename T>
207 struct Direction :
public Forward<N,T> {};
209 template<
class TList,
class Separator>
211 typedef TList Result;
219 static const id_t ID = 1;
222 template<
unsigned long N,
typename T>
223 struct Direction :
public Backward<N,T> {};
225 template<
class TList,
class Separator>
227 typedef TList Result;
235 static const id_t ID = 2;
238 template<
unsigned long N,
typename T>
239 struct Direction :
public Forward<N,T> {};
241 template<
class TList,
class Separator>
243 typedef typename Loki::TL::Append<TList,Separator>::Result Result;
251 static const id_t ID = 3;
254 template<
unsigned long N,
typename T>
255 struct Direction :
public Backward<N,T> {};
257 template<
class TList,
class Separator>
259 typedef Loki::Typelist<Separator,TList> Result;
269 static const id_t ID = 0;
270 static const uint_t NParProc = 1;
272 template<u
int_t M, u
int_t P,
class T>
281 void apply(
const T*, T*) { }
289 template<
unsigned int NT>
291 static const id_t ID = NT-1;
292 static const uint_t NParProc = NT;
294 template<u
int_t M, u
int_t P,
class T>
304 omp_set_nested(
true);
308 void apply(
const T*, T* d) { apply(d); }
315 struct OpenMP<1>:
public Serial { };