61 PW_Basis(std::string device_, std::string precision_);
66 const int poolnproc_in,
67 const int poolrank_in,
68 MPI_Comm pool_world_in
82 const int nx_in,
int ny_in,
int nz_in
87 const bool gamma_only_in,
88 const double pwecut_in,
89 const int distribution_type_in = 1,
90 const bool xprime_in =
true
95 const bool inpt_full_pw =
false,
96 const int inpt_full_pw_dim = 0
251 template <
typename FPTYPE>
253 std::complex<FPTYPE>* out,
254 const bool add =
false,
255 const FPTYPE factor = 1.0)
const;
256 template <
typename FPTYPE>
257 void real2recip(
const std::complex<FPTYPE>* in,
258 std::complex<FPTYPE>* out,
259 const bool add =
false,
260 const FPTYPE factor = 1.0)
const;
261 template <
typename FPTYPE>
262 void recip2real(
const std::complex<FPTYPE>* in,
264 const bool add =
false,
265 const FPTYPE factor = 1.0)
const;
266 template <
typename FPTYPE>
267 void recip2real(
const std::complex<FPTYPE>* in,
268 std::complex<FPTYPE>* out,
269 const bool add =
false,
270 const FPTYPE factor = 1.0)
const;
272 template <
typename FPTYPE>
274 std::complex<FPTYPE>* out,
275 const bool add =
false,
276 const FPTYPE factor = 1.0)
const;
277 template <
typename FPTYPE>
279 std::complex<FPTYPE>* out,
280 const bool add =
false,
281 const FPTYPE factor = 1.0)
const;
282 template <
typename FPTYPE>
285 const bool add =
false,
286 const FPTYPE factor = 1.0)
const;
287 template <
typename FPTYPE>
289 std::complex<FPTYPE>* out,
290 const bool add =
false,
291 const FPTYPE factor = 1.0)
const;
313 template <
typename TK,
316 typename std::enable_if<!std::is_same<TK, typename GetTypeReal<TK>::type>::value
317 && (std::is_same<TR, typename GetTypeReal<TK>::type>::value
318 || std::is_same<TR, TK>::value)
319 && std::is_same<Device, base_device::DEVICE_CPU>::value,
344 template <
typename TK,
347 typename std::enable_if<!std::is_same<TK, typename GetTypeReal<TK>::type>::value
348 && (std::is_same<TR, typename GetTypeReal<TK>::type>::value
349 || std::is_same<TR, TK>::value)
350 && std::is_same<Device, base_device::DEVICE_GPU>::value,
355 const bool add =
false,
390 template <
typename TR,
typename TK,
typename Device,
391 typename std::enable_if<!std::is_same<TK, typename GetTypeReal<TK>::type>::value
392 && (std::is_same<TR, typename GetTypeReal<TK>::type>::value || std::is_same<TR, TK>::value)
393 && std::is_same<Device, base_device::DEVICE_CPU>::value ,
int>::type = 0>
396 const bool add =
false,
402 template <
typename TR,
typename TK,
typename Device,
403 typename std::enable_if<!std::is_same<TK, typename GetTypeReal<TK>::type>::value
404 && (std::is_same<TR, typename GetTypeReal<TK>::type>::value || std::is_same<TR, TK>::value)
405 && std::is_same<Device, base_device::DEVICE_GPU>::value ,
int>::type = 0>
408 const bool add =
false,
416 template <
typename T>
420 template <
typename T>
3x3 matrix and related mathamatical operations
Definition matrix3.h:19
3 elements vector
Definition vector3.h:22
Definition fft_bundle.h:11
A class which can convert a function of "r" to the corresponding linear superposition of plane waves ...
Definition pw_basis.h:56
void recip2real_gpu(const std::complex< FPTYPE > *in, std::complex< FPTYPE > *out, const bool add=false, const FPTYPE factor=1.0) const
int nrxx
Definition pw_basis.h:120
void getfftixy2is(int *fftixy2is) const
Definition pw_basis.cpp:274
int nst
Definition pw_basis.h:111
int nmaxgr
Definition pw_basis.h:245
void setfullpw(const bool inpt_full_pw=false, const int inpt_full_pw_dim=0)
Definition pw_init.cpp:246
int nstot
Definition pw_basis.h:114
double omega
volume of the cell
Definition pw_basis.h:178
void real2recip(const FPTYPE *in, std::complex< FPTYPE > *out, const bool add=false, const FPTYPE factor=1.0) const
transform real space to reciprocal space
Definition pw_transform.cpp:79
void real_to_recip(TR *in, TK *out, const bool add=false, const typename GetTypeReal< TK >::type factor=1.0) const
Converts data from real space to reciprocal space (Fourier space).
Definition pw_basis.h:394
int riy
Definition pw_basis.h:240
int lix
Definition pw_basis.h:241
bool xprime
Definition pw_basis.h:242
int nx
Definition pw_basis.h:239
int * numz
Definition pw_basis.h:122
std::string precision
single, double, mixing
Definition pw_basis.h:441
void set_device(std::string device_)
Definition pw_basis.cpp:296
ModuleBase::Matrix3 GT
traspose of G
Definition pw_basis.h:176
int nxy
Definition pw_basis.h:239
double tpiba
2pi/lat0
Definition pw_basis.h:172
int * ig2ixyz_gpu
Definition pw_basis.h:107
int liy
Definition pw_basis.h:240
int poolnproc
Definition pw_basis.h:182
void gatherp_scatters(std::complex< T > *in, std::complex< T > *out) const
gather planes and scatter sticks
Definition pw_gatherscatter.h:15
int * startr
Definition pw_basis.h:126
void distribution_method1()
Definition pw_distributeg_method1.cpp:25
int rix
Definition pw_basis.h:241
int * startg
Definition pw_basis.h:125
bool double_data_
if has double data
Definition pw_basis.h:442
void count_pw_st(int *st_length2D, int *st_bottom2D)
(1) We count the total number of planewaves (tot_npw) and sticks (this->nstot) here.
Definition pw_distributeg.cpp:44
int npw
Definition pw_basis.h:115
bool gamma_only
only half g are used.
Definition pw_basis.h:166
std::string device
cpu or gpu
Definition pw_basis.h:440
double ggecut
Energy cut off for g^2/2 = ecutwfc(Ry)*lat0^2/4pi^2, unit in 1/lat0^2.
Definition pw_basis.h:169
int * d_is2fftixy
Definition pw_basis.h:109
double * gg_uniq
Definition pw_basis.h:160
PW_Basis()
Definition pw_basis.cpp:11
ModuleBase::Vector3< double > * gdirect
Definition pw_basis.h:130
int * startnsz_per
Definition pw_basis.h:141
void initmpi(const int poolnproc_in, const int poolrank_in, MPI_Comm pool_world_in)
Definition pw_init.cpp:7
int * numr
Definition pw_basis.h:124
void divide_sticks_1(int *st_i, int *st_j, int *st_length)
(3-1) Distribute sticks to cores according to the number of plane waves.
Definition pw_distributeg_method1.cpp:261
int * istot2ixy
Definition pw_basis.h:108
void create_maps(int *st_length2D)
(3) Create the maps from ixy to ip, istot, and from istot to ixy, and construt npw_per simultaneously...
Definition pw_distributeg_method2.cpp:142
int fftnxy
Definition pw_basis.h:238
int ny
Definition pw_basis.h:239
int fftny
Definition pw_basis.h:238
void divide_sticks_2()
(2) Devide the sticks to each core according to the number of sticks Sticks are in the order of ixy i...
Definition pw_distributeg_method2.cpp:120
int fftnz
Definition pw_basis.h:238
void distribution_method2()
Definition pw_distributeg_method2.cpp:25
void set_precision(std::string precision_)
Definition pw_basis.cpp:300
void get_ig2isz_is2fftixy(int *st_bottom, int *st_length)
(5) Construct ig2isz, and is2fftixy.
Definition pw_distributeg.cpp:156
int startz_current
Definition pw_basis.h:127
virtual void distribute_r()
distribute real-space grids to different processors
Definition pw_distributer.cpp:11
virtual void initgrids(const double lat0_in, const ModuleBase::Matrix3 latvec_in, const double gridecut)
Definition pw_init.cpp:23
void distribute_g()
distribute plane waves to different cores
Definition pw_distributeg.cpp:13
double lat0
unit length for lattice, unit in bohr
Definition pw_basis.h:171
int poolrank
Definition pw_basis.h:183
std::string classname
Definition pw_basis.h:59
int ngg
Definition pw_basis.h:158
std::string get_precision() const
Definition pw_basis.h:436
void initparameters(const bool gamma_only_in, const double pwecut_in, const int distribution_type_in=1, const bool xprime_in=true)
Definition pw_init.cpp:213
int * nst_per
Definition pw_basis.h:112
int ng_xeq0
Definition pw_basis.h:244
int fftnx
Definition pw_basis.h:238
int * npw_per
Definition pw_basis.h:116
int nplane
Definition pw_basis.h:128
std::string get_device() const
Definition pw_basis.h:435
void collect_uniqgg()
Definition pw_basis.cpp:193
int full_pw_dim
Definition pw_basis.h:180
void real2recip_gpu(const std::complex< FPTYPE > *in, std::complex< FPTYPE > *out, const bool add=false, const FPTYPE factor=1.0) const
void real2recip_gpu(const FPTYPE *in, std::complex< FPTYPE > *out, const bool add=false, const FPTYPE factor=1.0) const
FFT_Bundle fft_bundle
Definition pw_basis.h:248
int fftnxyz
Definition pw_basis.h:238
ModuleBase::Matrix3 latvec
Unitcell lattice vectors, unit in lat0.
Definition pw_basis.h:174
void recip2real_gpu(const std::complex< FPTYPE > *in, FPTYPE *out, const bool add=false, const FPTYPE factor=1.0) const
MPI_Comm pool_world
Definition pw_basis.h:103
ModuleBase::Matrix3 G
reciprocal lattice vector, unit in 1/lat0
Definition pw_basis.h:175
void recip2real(const std::complex< FPTYPE > *in, FPTYPE *out, const bool add=false, const FPTYPE factor=1.0) const
transform reciprocal space to real space
Definition pw_transform.cpp:205
void gathers_scatterp(std::complex< T > *in, std::complex< T > *out) const
gather sticks and scatter planes
Definition pw_gatherscatter.h:99
int nxyz
Definition pw_basis.h:239
int distribution_type
distribution method
Definition pw_basis.h:179
bool full_pw
Definition pw_basis.h:167
int * numg
Definition pw_basis.h:123
double tpiba2
4pi^2/lat0^2
Definition pw_basis.h:173
virtual ~PW_Basis()
Definition pw_basis.cpp:23
void get_istot2ixy(int *st_i, int *st_j)
(3-2) Rearrange sticks in the order of the ip of core increasing, in each core, sticks are sorted in ...
Definition pw_distributeg_method1.cpp:317
int * ig2igg
Definition pw_basis.h:159
void collect_local_pw()
Definition pw_basis.cpp:135
double * gg
Definition pw_basis.h:132
int * is2fftixy
Definition pw_basis.h:109
int ig_gge0
Definition pw_basis.h:135
int nstnz
Definition pw_basis.h:113
int * startz
Definition pw_basis.h:121
ModuleBase::Matrix3 GGT
GGT = G*GT.
Definition pw_basis.h:177
bool float_data_
if has float data
Definition pw_basis.h:443
int * fftixy2ip
Definition pw_basis.h:110
void collect_st(int *st_length2D, int *st_bottom2D, int *st_i, int *st_j, int *st_length)
(2) Collect the x, y indexs, length of the sticks.
Definition pw_distributeg_method1.cpp:131
double gridecut_lat
Energy cut off for all fft grids = ecutrho(Ry)*lat0^2/4pi^2, unit in 1/lat0^2.
Definition pw_basis.h:170
int npwtot
Definition pw_basis.h:117
int * ig2isz
Definition pw_basis.h:106
int nz
Definition pw_basis.h:239
void setuptransform()
Definition pw_basis.cpp:56
void getstartgr()
Definition pw_basis.cpp:76
ModuleBase::Vector3< double > * gcar
Definition pw_basis.h:131
void recip_to_real(TK *in, TR *out, const bool add=false, const typename GetTypeReal< TK >::type factor=1.0) const
Converts data from reciprocal space to real space on Cpu.
Definition pw_basis.h:322
T type
Definition macros.h:8
Definition memory_op.h:77
Definition memory_op.h:17
Definition memory_op.h:45