ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
fft_bundle.h
Go to the documentation of this file.
1#ifndef FFT_TEMP_H
2#define FFT_TEMP_H
3
4#include "fft_base.h"
5#include "fft_cpu.h"
6
7#include <memory>
8namespace ModulePW
9{
11{
12 public:
23 FFT_Bundle(std::string device_in, std::string precision_in) : device(device_in), precision(precision_in) {};
24
33 void setfft(std::string device_in, std::string precision_in);
34
54 void initfft(int nx_in,
55 int ny_in,
56 int nz_in,
57 int lixy_in,
58 int rixy_in,
59 int ns_in,
60 int nplane_in,
61 int nproc_in,
62 bool gamma_only_in,
63 bool xprime_in = true,
64 bool mpifft_in = false);
65
73 void initfftmode(int fft_mode_in)
74 {
75 this->fft_mode = fft_mode_in;
76 }
77
78 void setupFFT();
79
80 void clearFFT();
81
82 void clear();
83
84 void resource_handler(const int flag) const;
92 template <typename FPTYPE>
93 FPTYPE* get_rspace_data() const;
101 template <typename FPTYPE>
102 std::complex<FPTYPE>* get_auxr_data() const;
110 template <typename FPTYPE>
111 std::complex<FPTYPE>* get_auxg_data() const;
119 template <typename FPTYPE>
120 std::complex<FPTYPE>* get_auxr_3d_data() const;
121
132 template <typename FPTYPE>
133 void fftzfor(std::complex<FPTYPE>* in, std::complex<FPTYPE>* out) const;
143 template <typename FPTYPE>
144 void fftxyfor(std::complex<FPTYPE>* in, std::complex<FPTYPE>* out) const;
154 template <typename FPTYPE>
155 void fftzbac(std::complex<FPTYPE>* in, std::complex<FPTYPE>* out) const;
165 template <typename FPTYPE>
166 void fftxybac(std::complex<FPTYPE>* in, std::complex<FPTYPE>* out) const;
167
177 template <typename FPTYPE>
178 void fftxyr2c(FPTYPE* in, std::complex<FPTYPE>* out) const;
188 template <typename FPTYPE>
189 void fftxyc2r(std::complex<FPTYPE>* in, FPTYPE* out) const;
190
191 template <typename FPTYPE>
192 void fft3D_forward(std::complex<FPTYPE>* in, std::complex<FPTYPE>* out) const;
193 template <typename FPTYPE>
194 void fft3D_backward(std::complex<FPTYPE>* in, std::complex<FPTYPE>* out) const;
195
196 private:
197 int fft_mode = 0;
198 bool float_flag = false;
199 bool double_flag = false;
200 std::shared_ptr<FFT_BASE<float>> fft_float = nullptr;
201 std::shared_ptr<FFT_BASE<double>> fft_double = nullptr;
202
203 std::string device = "cpu";
204 std::string precision = "double";
205};
206// Use RAII (Resource Acquisition Is Initialization) to
207// control the resources used by hthread when setting the DSP
209 {
211 FFT_Guard(const FFT_Bundle& fft) : fft_(fft)
214 {
216 }
217 };
218
219} // namespace ModulePW
220#endif // FFT_H
Definition fft_bundle.h:11
bool float_flag
Definition fft_bundle.h:198
std::string device
Definition fft_bundle.h:203
void fftxyfor(std::complex< FPTYPE > *in, std::complex< FPTYPE > *out) const
Forward fft in x-y direction.
void fftxyr2c(FPTYPE *in, std::complex< FPTYPE > *out) const
Real to complex fft in x-y direction.
void fft3D_backward(std::complex< FPTYPE > *in, std::complex< FPTYPE > *out) const
std::complex< FPTYPE > * get_auxr_3d_data() const
Get the auxr 3d data.
void fftxyc2r(std::complex< FPTYPE > *in, FPTYPE *out) const
Complex to real fft in x-y direction.
void fft3D_forward(std::complex< FPTYPE > *in, std::complex< FPTYPE > *out) const
void fftxybac(std::complex< FPTYPE > *in, std::complex< FPTYPE > *out) const
Backward fft in x-y direction.
void initfft(int nx_in, int ny_in, int nz_in, int lixy_in, int rixy_in, int ns_in, int nplane_in, int nproc_in, bool gamma_only_in, bool xprime_in=true, bool mpifft_in=false)
Initialize the fft parameters.
Definition fft_bundle.cpp:35
FFT_Bundle(std::string device_in, std::string precision_in)
Constructor with device and precision.
Definition fft_bundle.h:23
void initfftmode(int fft_mode_in)
Initialize the fft mode.
Definition fft_bundle.h:73
void resource_handler(const int flag) const
Definition fft_bundle.cpp:149
void fftzbac(std::complex< FPTYPE > *in, std::complex< FPTYPE > *out) const
Backward fft in z direction.
~FFT_Bundle()
Definition fft_bundle.cpp:24
void fftzfor(std::complex< FPTYPE > *in, std::complex< FPTYPE > *out) const
Forward fft in z direction.
int fft_mode
Definition fft_bundle.h:197
std::shared_ptr< FFT_BASE< float > > fft_float
Definition fft_bundle.h:200
std::shared_ptr< FFT_BASE< double > > fft_double
Definition fft_bundle.h:201
std::string precision
Definition fft_bundle.h:204
std::complex< FPTYPE > * get_auxg_data() const
Get the auxg data.
void setfft(std::string device_in, std::string precision_in)
Set device and precision.
Definition fft_bundle.cpp:29
void setupFFT()
Definition fft_bundle.cpp:113
FFT_Bundle()
Definition fft_bundle.h:13
std::complex< FPTYPE > * get_auxr_data() const
Get the auxr data.
bool double_flag
Definition fft_bundle.h:199
void clearFFT()
Definition fft_bundle.cpp:125
FPTYPE * get_rspace_data() const
Get the real space data.
void clear()
Definition fft_bundle.cpp:136
Definition pw_op.cpp:3
Definition fft_bundle.h:209
const FFT_Bundle & fft_
Definition fft_bundle.h:210
~FFT_Guard()
Definition fft_bundle.h:213
FFT_Guard(const FFT_Bundle &fft)
Definition fft_bundle.h:211