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 ModuleBase
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
41 void set_dsp_cluster_id(int id) { this->dsp_cluster_id_ = id; }
42
62 void initfft(int nx_in,
63 int ny_in,
64 int nz_in,
65 int lixy_in,
66 int rixy_in,
67 int ns_in,
68 int nplane_in,
69 int nproc_in,
70 bool gamma_only_in,
71 bool xprime_in = true,
72 bool mpifft_in = false);
73
81 void initfftmode(int fft_mode_in)
82 {
83 this->fft_mode = fft_mode_in;
84 }
85
86 void setupFFT();
87
88 void clearFFT();
89
90 void clear();
91
92 void resource_handler(const int flag) const;
100 template <typename FPTYPE>
101 FPTYPE* get_rspace_data() const;
109 template <typename FPTYPE>
110 std::complex<FPTYPE>* get_auxr_data() const;
118 template <typename FPTYPE>
119 std::complex<FPTYPE>* get_auxg_data() const;
127 template <typename FPTYPE>
128 std::complex<FPTYPE>* get_auxr_3d_data() const;
129
140 template <typename FPTYPE>
141 void fftzfor(std::complex<FPTYPE>* in, std::complex<FPTYPE>* out) const;
151 template <typename FPTYPE>
152 void fftxyfor(std::complex<FPTYPE>* in, std::complex<FPTYPE>* out) const;
162 template <typename FPTYPE>
163 void fftzbac(std::complex<FPTYPE>* in, std::complex<FPTYPE>* out) const;
173 template <typename FPTYPE>
174 void fftxybac(std::complex<FPTYPE>* in, std::complex<FPTYPE>* out) const;
175
185 template <typename FPTYPE>
186 void fftxyr2c(FPTYPE* in, std::complex<FPTYPE>* out) const;
196 template <typename FPTYPE>
197 void fftxyc2r(std::complex<FPTYPE>* in, FPTYPE* out) const;
198
199 template <typename FPTYPE>
200 void fft3D_forward(std::complex<FPTYPE>* in, std::complex<FPTYPE>* out) const;
201 template <typename FPTYPE>
202 void fft3D_backward(std::complex<FPTYPE>* in, std::complex<FPTYPE>* out) const;
203
204 private:
205 int fft_mode = 0;
206 bool float_flag = false;
207 bool double_flag = false;
208 std::shared_ptr<FFT_BASE<float>> fft_float = nullptr;
209 std::shared_ptr<FFT_BASE<double>> fft_double = nullptr;
210
211 std::string device = "cpu";
212 std::string precision = "double";
214};
215// Use RAII (Resource Acquisition Is Initialization) to
216// control the resources used by hthread when setting the DSP
218 {
220 FFT_Guard(const FFT_Bundle& fft) : fft_(fft)
223 {
225 }
226 };
227
228} // namespace ModuleBase
229#endif // FFT_H
Definition fft_bundle.h:11
void fftxyc2r(std::complex< FPTYPE > *in, FPTYPE *out) const
Complex to real fft in x-y direction.
bool float_flag
Definition fft_bundle.h:206
void fft3D_forward(std::complex< FPTYPE > *in, std::complex< FPTYPE > *out) const
FPTYPE * get_rspace_data() const
Get the real space data.
FFT_Bundle(std::string device_in, std::string precision_in)
Constructor with device and precision.
Definition fft_bundle.h:23
std::shared_ptr< FFT_BASE< float > > fft_float
Definition fft_bundle.h:208
void fftxybac(std::complex< FPTYPE > *in, std::complex< FPTYPE > *out) const
Backward fft in x-y direction.
~FFT_Bundle()
Definition fft_bundle.cpp:24
std::string device
Definition fft_bundle.h:211
void set_dsp_cluster_id(int id)
Set the DSP cluster id for the FFT_DSP backend.
Definition fft_bundle.h:41
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
void clearFFT()
Definition fft_bundle.cpp:127
std::string precision
Definition fft_bundle.h:212
void fftxyr2c(FPTYPE *in, std::complex< FPTYPE > *out) const
Real to complex fft in x-y direction.
FFT_Bundle()
Definition fft_bundle.h:13
void fft3D_backward(std::complex< FPTYPE > *in, std::complex< FPTYPE > *out) const
int dsp_cluster_id_
Definition fft_bundle.h:213
void initfftmode(int fft_mode_in)
Initialize the fft mode.
Definition fft_bundle.h:81
void fftzbac(std::complex< FPTYPE > *in, std::complex< FPTYPE > *out) const
Backward fft in z direction.
std::complex< FPTYPE > * get_auxr_3d_data() const
Get the auxr 3d data.
void fftxyfor(std::complex< FPTYPE > *in, std::complex< FPTYPE > *out) const
Forward fft in x-y direction.
void setupFFT()
Definition fft_bundle.cpp:115
void fftzfor(std::complex< FPTYPE > *in, std::complex< FPTYPE > *out) const
Forward fft in z direction.
std::complex< FPTYPE > * get_auxg_data() const
Get the auxg data.
void clear()
Definition fft_bundle.cpp:138
int fft_mode
Definition fft_bundle.h:205
std::complex< FPTYPE > * get_auxr_data() const
Get the auxr data.
std::shared_ptr< FFT_BASE< double > > fft_double
Definition fft_bundle.h:209
void setfft(std::string device_in, std::string precision_in)
Set device and precision.
Definition fft_bundle.cpp:29
bool double_flag
Definition fft_bundle.h:207
void resource_handler(const int flag) const
Definition fft_bundle.cpp:151
Definition clebsch_gordan_coeff.cpp:8
Definition fft_bundle.h:218
~FFT_Guard()
Definition fft_bundle.h:222
FFT_Guard(const FFT_Bundle &fft)
Definition fft_bundle.h:220
const FFT_Bundle & fft_
Definition fft_bundle.h:219