Bridge++  Version 1.6.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fft_3d_parallel1d.h
Go to the documentation of this file.
1 
13 #ifndef FFT_3D_PARALLEL1D_INCLUDED
14 #define FFT_3D_PARALLEL1D_INCLUDED
15 
16 // requires FFTW library
17 #ifdef USE_FFTWLIB
18 
19 // requires MPI
20 #ifdef USE_MPI
21 
22 #include <fftw3-mpi.h>
23 
24 #include "fft.h"
26 
27 class FFT_3d_parallel1d : public FFT
28 {
29  public:
30  static const std::string class_name;
31 
32  public:
33  FFT_3d_parallel1d();
34  virtual ~FFT_3d_parallel1d();
35 
36  void fft(Field& dst, const Field& src, enum Direction dir);
37  void fft(Field& dst, const Field& src);
38  void fft(Field& field);
39 
40  void set_parameters(const Parameters& params);
41  void set_parameters(const std::string& direction);
42 
43  private:
44 
45  void initialize();
46  void finalize();
47 
48  bool check_ok();
49 
50  void initialize_plan(const Field& src);
51  void clear_plan();
52 
53  // size info
54  int m_ndim;
55  ptrdiff_t m_nsize[4]; // assume atmost 4dimensional
56  ptrdiff_t m_vol;
57  ptrdiff_t m_nv; // number of complex elements
58 
59  fftw_complex *m_buf_in;
60  fftw_complex *m_buf_out;
61  fftw_plan m_plan_fw;
62  fftw_plan m_plan_bw;
63 
64  MPI_Comm m_comm;
65 
66  Direction m_direction;
67 
68 
69 #ifdef USE_FACTORY
70  private:
71  static FFT *create_object()
72  {
73  return new FFT_3d_parallel1d();
74  }
75 
76  public:
77  static bool register_factory()
78  {
79  return FFT::Factory::Register("FFT_3d_parallel_1dim", create_object);
80  }
81 #endif
82 };
83 
84 #endif /* USE_MPI */
85 #endif /* USE_FFTWLIB */
86 
87 #endif /* FFT_3D_PARALLEL1D_INCLUDED */
Container of Field-type object.
Definition: field.h:46
Class for parameters.
Definition: parameters.h:46
Direction
Definition: bridge_defs.h:24