66 const bool gamma_only_in,
70 const int distribution_type_in = 1,
71 const bool xprime_in =
true
100 const double& erf_height_in = 0.0,
101 const double& erf_sigma_in = 0.1);
114 template <
typename FPTYPE>
116 std::complex<FPTYPE>* out,
118 const bool add =
false,
119 const FPTYPE factor = 1.0)
const;
120 template <
typename FPTYPE>
121 void real2recip(
const std::complex<FPTYPE>* in,
122 std::complex<FPTYPE>* out,
124 const bool add =
false,
125 const FPTYPE factor = 1.0)
const;
126 template <
typename FPTYPE>
127 void recip2real(
const std::complex<FPTYPE>* in,
130 const bool add =
false,
131 const FPTYPE factor = 1.0)
const;
132 template <
typename FPTYPE>
133 void recip2real(
const std::complex<FPTYPE>* in,
134 std::complex<FPTYPE>* out,
136 const bool add =
false,
137 const FPTYPE factor = 1.0)
const;
139 template <
typename FPTYPE,
typename Device>
140 void convolution(
const Device* ctx,
143 const std::complex<FPTYPE>* input,
144 const FPTYPE* input1,
145 std::complex<FPTYPE>*
output,
146 const bool add =
false,
147 const FPTYPE factor =1.0)
const ;
149 template <
typename FPTYPE>
150 void real2recip_dsp(
const std::complex<FPTYPE>* in,
151 std::complex<FPTYPE>* out,
153 const bool add =
false,
154 const FPTYPE factor = 1.0)
const;
155 template <
typename FPTYPE>
156 void recip2real_dsp(
const std::complex<FPTYPE>* in,
157 std::complex<FPTYPE>* out,
159 const bool add =
false,
160 const FPTYPE factor = 1.0)
const;
164 template <
typename FPTYPE,
typename Device>
166 const std::complex<FPTYPE>* in,
167 std::complex<FPTYPE>* out,
169 const bool add =
false,
170 const FPTYPE factor = 1.0)
const;
171 template <
typename FPTYPE,
typename Device>
173 const std::complex<FPTYPE>* in,
174 std::complex<FPTYPE>* out,
176 const bool add =
false,
177 const FPTYPE factor = 1.0)
const;
180 template <
typename TK,
182 typename std::enable_if<std::is_same<Device, base_device::DEVICE_CPU>::value,
int>::type = 0>
186 const bool add =
false,
190 this->real2recip_dsp(in, out, ik, add, factor);
195 template <
typename TK,
197 typename std::enable_if<std::is_same<Device, base_device::DEVICE_CPU>::value,
int>::type = 0>
201 const bool add =
false,
206 this->recip2real_dsp(in,out,ik,add,factor);
211 template <
typename FPTYPE>
213 std::complex<FPTYPE>* out,
215 const bool add =
false,
216 const FPTYPE factor = 1.0)
const;
218 template <
typename FPTYPE>
220 std::complex<FPTYPE>* out,
222 const bool add =
false,
223 const FPTYPE factor = 1.0)
const;
225 template <
typename FPTYPE,
227 typename std::enable_if<!std::is_same<Device, base_device::DEVICE_CPU>::value,
int>::type = 0>
231 const bool add =
false,
237 template <
typename TK,
239 typename std::enable_if<std::is_same<Device, base_device::DEVICE_GPU>::value,
int>::type = 0>
243 const bool add =
false,
252 double&
getgk2(
const int ik,
const int igl)
const;
260 int&
getigl2isz(
const int ik,
const int igl)
const;
262 int&
getigl2ig(
const int ik,
const int igl)
const;
265 std::vector<int>
get_ig2ix(
const int ik)
const;
267 std::vector<int>
get_ig2iy(
const int ik)
const;
269 std::vector<int>
get_ig2iz(
const int ik)
const;
3 elements vector
Definition vector3.h:22
Special pw_basis class. It includes different k-points.
Definition pw_basis_k.h:57
double * d_kvec_c
Definition pw_basis_k.h:277
ModuleBase::Vector3< double > getgdirect(const int ik, const int igl) const
Definition pw_basis_k.cpp:381
float * s_gk2
Definition pw_basis_k.h:104
FPTYPE * get_kvec_c_data() const
void real_to_recip(const Device *ctx, const std::complex< FPTYPE > *in, std::complex< FPTYPE > *out, const int ik, const bool add=false, const FPTYPE factor=1.0) const
Definition xc3_mock.h:81
ModuleBase::Vector3< double > & getgcar(const int ik, const int igl) const
Definition pw_basis_k.cpp:376
PW_Basis_K()
Definition pw_basis_k.cpp:12
int npwk_max
Definition pw_basis_k.h:79
int * ig2ixyz_k
[npw] map ig to ixyz
Definition pw_basis_k.h:89
void recip2real(const std::complex< FPTYPE > *in, FPTYPE *out, const int ik, const bool add=false, const FPTYPE factor=1.0) const
transform reciprocal space to real space
Definition pw_transform_k.cpp:228
~PW_Basis_K()
Definition pw_basis_k.cpp:17
void real_to_recip(const FPTYPE *in, FPTYPE *out, const int ik, const bool add=false, const typename GetTypeReal< FPTYPE >::type factor=1.0) const
Definition pw_basis_k.h:228
double gk_ecut
Definition pw_basis_k.h:81
std::vector< int > get_ig2ix(const int ik) const
Definition pw_basis_k.cpp:432
double * d_gk2
Definition pw_basis_k.h:105
double & getgk2(const int ik, const int igl) const
Definition pw_basis_k.cpp:371
void recip_to_real(const Device *ctx, const std::complex< FPTYPE > *in, std::complex< FPTYPE > *out, const int ik, const bool add=false, const FPTYPE factor=1.0) const
Definition xc3_mock.h:94
double erf_ecut
Definition pw_basis_k.h:94
void real2recip(const FPTYPE *in, std::complex< FPTYPE > *out, const int ik, const bool add=false, const FPTYPE factor=1.0) const
transform real space to reciprocal space
Definition pw_transform_k.cpp:91
int * npwk
Definition pw_basis_k.h:78
void setuptransform()
Definition pw_basis_k.cpp:198
std::vector< int > get_ig2iz(const int ik) const
Definition pw_basis_k.cpp:472
ModuleBase::Vector3< double > cal_GplusK_cartesian(const int ik, const int ig) const
Definition pw_basis_k.cpp:343
double * d_gcar
Definition pw_basis_k.h:277
void real2recip_gpu(const std::complex< FPTYPE > *in, std::complex< FPTYPE > *out, const int ik, const bool add=false, const FPTYPE factor=1.0) const
int & getigl2ig(const int ik, const int igl) const
Definition pw_basis_k.cpp:398
double erf_height
Definition pw_basis_k.h:95
int * igl2ig_k
Definition pw_basis_k.h:88
void initparameters(const bool gamma_only_in, const double ecut_in, const int nk_in, const ModuleBase::Vector3< double > *kvec_d, const int distribution_type_in=1, const bool xprime_in=true)
Definition pw_basis_k.cpp:49
double erf_sigma
Definition pw_basis_k.h:96
int * igl2isz_k
Definition pw_basis_k.h:87
void recip_to_real(const TK *in, TK *out, const int ik, const bool add=false, const typename GetTypeReal< TK >::type factor=1.0) const
Definition pw_basis_k.h:198
float * s_gcar
Definition pw_basis_k.h:276
double * gk2
[npw] map ig to ixyz,which is used in dsp fft.
Definition pw_basis_k.h:91
ModuleBase::Vector3< double > getgpluskcar(const int ik, const int igl) const
Definition pw_basis_k.cpp:390
std::vector< int > get_ig2iy(const int ik) const
Definition pw_basis_k.cpp:452
ModuleBase::Vector3< double > * kvec_d
Definition pw_basis_k.h:76
PW_Basis_K(std::string device_, std::string precision_)
Definition pw_basis_k.h:61
int * d_igl2isz_k
Definition pw_basis_k.h:87
std::vector< int > ig2ixyz_k_cpu
Definition pw_basis_k.h:90
int & getigl2isz(const int ik, const int igl) const
Definition pw_basis_k.cpp:394
ModuleBase::Vector3< double > * kvec_c
Definition pw_basis_k.h:77
float * s_kvec_c
Definition pw_basis_k.h:276
void get_ig2ixyz_k()
Definition pw_basis_k.cpp:403
FPTYPE * get_gk2_data() const
void recip2real_gpu(const std::complex< FPTYPE > *in, std::complex< FPTYPE > *out, const int ik, const bool add=false, const FPTYPE factor=1.0) const
void real_to_recip(const TK *in, TK *out, const int ik, const bool add=false, const typename GetTypeReal< TK >::type factor=1.0) const
Definition pw_basis_k.h:183
void setupIndGk()
Definition pw_basis_k.cpp:130
FPTYPE * get_gcar_data() const
int nks
Definition pw_basis_k.h:75
A class which can convert a function of "r" to the corresponding linear superposition of plane waves ...
Definition pw_basis.h:56
std::string classname
Definition pw_basis.h:59
void collect_local_pw()
Definition pw_basis.cpp:135
T type
Definition macros.h:8