ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
fft_base.h
Go to the documentation of this file.
1#ifndef FFT_BASE_H
2#define FFT_BASE_H
3
4#include <complex>
5namespace ModulePW
6{
7template <typename FPTYPE>
9{
10 public:
12 virtual ~FFT_BASE() {};
13
19 virtual __attribute__((weak)) void initfft(int nx_in,
20 int ny_in,
21 int nz_in,
24 int ns_in,
28 bool xprime_in = true);
29
30 virtual __attribute__((weak)) void initfft(int nx_in, int ny_in, int nz_in);
31
39 virtual void setupFFT() = 0;
40
48 virtual void cleanFFT() = 0;
49
57 virtual void clear() = 0;
67 virtual void resource_handler(const int flag) const {};
75 virtual __attribute__((weak)) FPTYPE* get_rspace_data() const;
76
77 virtual __attribute__((weak)) std::complex<FPTYPE>* get_auxr_data() const;
78
79 virtual __attribute__((weak)) std::complex<FPTYPE>* get_auxg_data() const;
80
88 virtual __attribute__((weak)) std::complex<FPTYPE>* get_auxr_3d_data() const;
89
90 // forward fft in x-y direction
91
103 virtual __attribute__((weak)) void fftxyfor(std::complex<FPTYPE>* in,
104 std::complex<FPTYPE>* out) const;
105
106 virtual __attribute__((weak)) void fftxybac(std::complex<FPTYPE>* in,
107 std::complex<FPTYPE>* out) const;
108
118 virtual __attribute__((weak)) void fftzfor(std::complex<FPTYPE>* in,
119 std::complex<FPTYPE>* out) const;
120
121 virtual __attribute__((weak)) void fftzbac(std::complex<FPTYPE>* in,
122 std::complex<FPTYPE>* out) const;
123
132 virtual __attribute__((weak)) void fftxyr2c(FPTYPE* in,
133 std::complex<FPTYPE>* out) const;
134
135 virtual __attribute__((weak)) void fftxyc2r(std::complex<FPTYPE>* in,
136 FPTYPE* out) const;
137
147 virtual __attribute__((weak)) void fft3D_forward(std::complex<FPTYPE>* in,
148 std::complex<FPTYPE>* out) const;
149
150 virtual __attribute__((weak)) void fft3D_backward(std::complex<FPTYPE>* in,
151 std::complex<FPTYPE>* out) const;
152
153 protected:
154 int nx = 0;
155 int ny = 0;
156 int nz = 0;
157};
158
163} // namespace ModulePW
164#endif // FFT_BASE_H
Definition fft_base.h:9
int nz
Definition fft_base.h:156
virtual virtual __attribute__((weak)) std virtual __attribute__((weak)) std virtual __attribute__((weak)) std virtual __attribute__((weak)) void fftxyfor(std virtual __attribute__((weak)) void fftxybac(std virtual __attribute__((weak)) void fftzfor(std virtual __attribute__((weak)) void fftzbac(std __attribute__((weak)) void fftxyr2c(FPTYPE *in
Get the auxiliary real space data in 3D.
virtual int int int int int int int nproc_in
Definition fft_base.h:26
virtual __attribute__((weak)) void initfft(int nx_in
Initialize the fft parameters as virtual function.
virtual void clear()=0
Clear the fft data as pure virtual function.
virtual int int int int int ns_in
Definition fft_base.h:24
virtual void resource_handler(const int flag) const
Allocate and destory the resoure in FFT running time, Now it only used in the DSP mode.
Definition fft_base.h:67
virtual int int int int rixy_in
Definition fft_base.h:23
virtual int int int int int int int bool bool xprime_in
Definition fft_base.h:28
virtual int int int int int int int bool gamma_only_in
Definition fft_base.h:27
int nx
Forward FFT in 3D.
Definition fft_base.h:154
int ny
Definition fft_base.h:155
virtual __attribute__((weak)) FPTYPE *get_rspace_data() const
Get the real space data in cpu-like fft.
virtual int int nz_in
Definition fft_base.h:21
FFT_BASE()
Definition fft_base.h:11
virtual int int int int int int nplane_in
Definition fft_base.h:25
virtual ~FFT_BASE()
Definition fft_base.h:12
virtual void cleanFFT()=0
Clean the fft plan as pure virtual function.
virtual int ny_in
Definition fft_base.h:20
virtual void setupFFT()=0
Setup the fft plan and data as pure virtual function.
virtual int int int lixy_in
Definition fft_base.h:22
Definition pw_op.cpp:3