65 const bool gamma_only_in,
69 const int distribution_type_in = 1,
70 const bool xprime_in =
true
99 const double& erf_height_in = 0.0,
100 const double& erf_sigma_in = 0.1);
113 template <
typename FPTYPE>
115 std::complex<FPTYPE>* out,
117 const bool add =
false,
118 const FPTYPE factor = 1.0)
const;
119 template <
typename FPTYPE>
120 void real2recip(
const std::complex<FPTYPE>* in,
121 std::complex<FPTYPE>* out,
123 const bool add =
false,
124 const FPTYPE factor = 1.0)
const;
125 template <
typename FPTYPE>
126 void recip2real(
const std::complex<FPTYPE>* in,
129 const bool add =
false,
130 const FPTYPE factor = 1.0)
const;
131 template <
typename FPTYPE>
132 void recip2real(
const std::complex<FPTYPE>* in,
133 std::complex<FPTYPE>* out,
135 const bool add =
false,
136 const FPTYPE factor = 1.0)
const;
138 template <
typename FPTYPE,
typename Device>
139 void convolution(
const Device* ctx,
142 const std::complex<FPTYPE>* input,
143 const FPTYPE* input1,
144 std::complex<FPTYPE>*
output,
145 const bool add =
false,
146 const FPTYPE factor =1.0)
const ;
148 template <
typename FPTYPE>
149 void real2recip_dsp(
const std::complex<FPTYPE>* in,
150 std::complex<FPTYPE>* out,
152 const bool add =
false,
153 const FPTYPE factor = 1.0)
const;
154 template <
typename FPTYPE>
155 void recip2real_dsp(
const std::complex<FPTYPE>* in,
156 std::complex<FPTYPE>* out,
158 const bool add =
false,
159 const FPTYPE factor = 1.0)
const;
163 template <
typename FPTYPE,
typename Device>
165 const std::complex<FPTYPE>* in,
166 std::complex<FPTYPE>* out,
168 const bool add =
false,
169 const FPTYPE factor = 1.0)
const;
170 template <
typename FPTYPE,
typename Device>
172 const std::complex<FPTYPE>* in,
173 std::complex<FPTYPE>* out,
175 const bool add =
false,
176 const FPTYPE factor = 1.0)
const;
179 template <
typename TK,
181 typename std::enable_if<std::is_same<Device, base_device::DEVICE_CPU>::value,
int>::type = 0>
185 const bool add =
false,
189 this->real2recip_dsp(in, out, ik, add, factor);
194 template <
typename TK,
196 typename std::enable_if<std::is_same<Device, base_device::DEVICE_CPU>::value,
int>::type = 0>
200 const bool add =
false,
205 this->recip2real_dsp(in,out,ik,add,factor);
210 template <
typename FPTYPE>
212 std::complex<FPTYPE>* out,
214 const bool add =
false,
215 const FPTYPE factor = 1.0)
const;
217 template <
typename FPTYPE>
219 std::complex<FPTYPE>* out,
221 const bool add =
false,
222 const FPTYPE factor = 1.0)
const;
224 template <
typename FPTYPE,
226 typename std::enable_if<!std::is_same<Device, base_device::DEVICE_CPU>::value,
int>::type = 0>
230 const bool add =
false,
236 template <
typename TK,
238 typename std::enable_if<std::is_same<Device, base_device::DEVICE_GPU>::value,
int>::type = 0>
242 const bool add =
false,
251 double&
getgk2(
const int ik,
const int igl)
const;
259 int&
getigl2isz(
const int ik,
const int igl)
const;
261 int&
getigl2ig(
const int ik,
const int igl)
const;
264 std::vector<int>
get_ig2ix(
const int ik)
const;
266 std::vector<int>
get_ig2iy(
const int ik)
const;
268 std::vector<int>
get_ig2iz(
const int ik)
const;
3 elements vector
Definition vector3.h:24
Special pw_basis class. It includes different k-points.
Definition pw_basis_k.h:56
double * d_kvec_c
Definition pw_basis_k.h:276
ModuleBase::Vector3< double > getgdirect(const int ik, const int igl) const
Definition pw_basis_k.cpp:390
float * s_gk2
Definition pw_basis_k.h:103
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:385
PW_Basis_K()
Definition pw_basis_k.cpp:12
int npwk_max
Definition pw_basis_k.h:78
int * ig2ixyz_k
[npw] map ig to ixyz
Definition pw_basis_k.h:88
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:227
double gk_ecut
Definition pw_basis_k.h:80
std::vector< int > get_ig2ix(const int ik) const
Definition pw_basis_k.cpp:441
double * d_gk2
Definition pw_basis_k.h:104
double & getgk2(const int ik, const int igl) const
Definition pw_basis_k.cpp:380
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:93
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:77
void setuptransform()
Definition pw_basis_k.cpp:206
std::vector< int > get_ig2iz(const int ik) const
Definition pw_basis_k.cpp:481
ModuleBase::Vector3< double > cal_GplusK_cartesian(const int ik, const int ig) const
Definition pw_basis_k.cpp:352
double * d_gcar
Definition pw_basis_k.h:276
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:407
double erf_height
Definition pw_basis_k.h:94
int * igl2ig_k
Definition pw_basis_k.h:87
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:95
int * igl2isz_k
Definition pw_basis_k.h:86
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:197
float * s_gcar
Definition pw_basis_k.h:275
double * gk2
[npw] map ig to ixyz,which is used in dsp fft.
Definition pw_basis_k.h:90
ModuleBase::Vector3< double > getgpluskcar(const int ik, const int igl) const
Definition pw_basis_k.cpp:399
std::vector< int > get_ig2iy(const int ik) const
Definition pw_basis_k.cpp:461
ModuleBase::Vector3< double > * kvec_d
Definition pw_basis_k.h:75
PW_Basis_K(std::string device_, std::string precision_)
Definition pw_basis_k.h:60
int * d_igl2isz_k
Definition pw_basis_k.h:86
std::vector< int > ig2ixyz_k_cpu
Definition pw_basis_k.h:89
int & getigl2isz(const int ik, const int igl) const
Definition pw_basis_k.cpp:403
ModuleBase::Vector3< double > * kvec_c
Definition pw_basis_k.h:76
float * s_kvec_c
Definition pw_basis_k.h:275
void get_ig2ixyz_k()
Definition pw_basis_k.cpp:412
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:182
void setupIndGk()
Definition pw_basis_k.cpp:130
FPTYPE * get_gcar_data() const
int nks
Definition pw_basis_k.h:74
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