ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
ModulePW::PW_Basis_Big Class Reference

#include <pw_basis_big.h>

Inheritance diagram for ModulePW::PW_Basis_Big:
Collaboration diagram for ModulePW::PW_Basis_Big:

Public Member Functions

 PW_Basis_Big ()
 
 PW_Basis_Big (std::string device_, std::string precision_)
 
 ~PW_Basis_Big ()
 
void setbxyz (const int bx_in, const int by_in, const int bz_in)
 
void autoset_big_cell_size (int &b_size, const int &nc_size, const int nproc=0)
 
virtual void initgrids (const double lat0_in, const ModuleBase::Matrix3 latvec_in, const double gridecut)
 
virtual void initgrids (const double lat0_in, const ModuleBase::Matrix3 latvec_in, const int nx_in, int ny_in, int nz_in)
 
virtual void distribute_r ()
 distribute real-space grids to different processors
 
- Public Member Functions inherited from ModulePW::PW_Basis_Sup
 PW_Basis_Sup ()
 
 PW_Basis_Sup (std::string device_, std::string precision_)
 
 ~PW_Basis_Sup ()
 
void setuptransform (const ModulePW::PW_Basis *pw_rho)
 
- Public Member Functions inherited from ModulePW::PW_Basis
 PW_Basis ()
 
 PW_Basis (std::string device_, std::string precision_)
 
virtual ~PW_Basis ()
 
void initmpi (const int poolnproc_in, const int poolrank_in, MPI_Comm pool_world_in)
 
void initparameters (const bool gamma_only_in, const double pwecut_in, const int distribution_type_in=1, const bool xprime_in=true)
 
void setfullpw (const bool inpt_full_pw=false, const int inpt_full_pw_dim=0)
 
void setuptransform ()
 
void collect_local_pw ()
 
void collect_uniqgg ()
 
template<typename FPTYPE >
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
 
template<typename FPTYPE >
void real2recip (const std::complex< FPTYPE > *in, std::complex< FPTYPE > *out, const bool add=false, const FPTYPE factor=1.0) const
 transform real space to reciprocal space
 
template<typename FPTYPE >
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
 
template<typename FPTYPE >
void recip2real (const std::complex< FPTYPE > *in, std::complex< FPTYPE > *out, const bool add=false, const FPTYPE factor=1.0) const
 transform reciprocal space to real space
 
template<typename FPTYPE >
void real2recip_gpu (const FPTYPE *in, std::complex< FPTYPE > *out, const bool add=false, const FPTYPE factor=1.0) const
 
template<typename FPTYPE >
void real2recip_gpu (const std::complex< FPTYPE > *in, std::complex< FPTYPE > *out, const bool add=false, const FPTYPE factor=1.0) const
 
template<typename FPTYPE >
void recip2real_gpu (const std::complex< FPTYPE > *in, FPTYPE *out, const bool add=false, const FPTYPE factor=1.0) const
 
template<typename FPTYPE >
void recip2real_gpu (const std::complex< FPTYPE > *in, std::complex< FPTYPE > *out, const bool add=false, const FPTYPE factor=1.0) const
 
template<typename TK , typename TR , typename Device , typename std::enable_if<!std::is_same< TK, typename GetTypeReal< TK >::type >::value &&(std::is_same< TR, typename GetTypeReal< TK >::type >::value||std::is_same< TR, TK >::value) &&std::is_same< Device, base_device::DEVICE_CPU >::value, int >::type = 0>
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.
 
template<typename TK , typename TR , typename Device , typename std::enable_if<!std::is_same< TK, typename GetTypeReal< TK >::type >::value &&(std::is_same< TR, typename GetTypeReal< TK >::type >::value||std::is_same< TR, TK >::value) &&std::is_same< Device, base_device::DEVICE_GPU >::value, int >::type = 0>
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 (Fourier space) to real space.
 
template<typename TR , typename TK , typename Device , typename std::enable_if<!std::is_same< TK, typename GetTypeReal< TK >::type >::value &&(std::is_same< TR, typename GetTypeReal< TK >::type >::value||std::is_same< TR, TK >::value) &&std::is_same< Device, base_device::DEVICE_CPU >::value, int >::type = 0>
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).
 
template<typename TR , typename TK , typename Device , typename std::enable_if<!std::is_same< TK, typename GetTypeReal< TK >::type >::value &&(std::is_same< TR, typename GetTypeReal< TK >::type >::value||std::is_same< TR, TK >::value) &&std::is_same< Device, base_device::DEVICE_GPU >::value, int >::type = 0>
void real_to_recip (TR *in, TK *out, const bool add=false, const typename GetTypeReal< TK >::type factor=1.0) const
 
void getfftixy2is (int *fftixy2is) const
 
void set_device (std::string device_)
 
void set_precision (std::string precision_)
 
std::string get_device () const
 
std::string get_precision () const
 

Public Attributes

int bx = 1
 
int by = 1
 
int bz = 1
 
int bxyz = 1
 
int nbx =0
 
int nby =0
 
int nbz =0
 
int nbzp =0
 
int nbxx =0
 
int nbzp_start =0
 
- Public Attributes inherited from ModulePW::PW_Basis
std::string classname
 
MPI_Comm pool_world =MPI_COMM_NULL
 
int * ig2isz =nullptr
 
int * ig2ixyz_gpu = nullptr
 
int * istot2ixy =nullptr
 
int * is2fftixy =nullptr
 
int * d_is2fftixy = nullptr
 
int * fftixy2ip =nullptr
 
int nst =0
 
int * nst_per =nullptr
 
int nstnz =0
 
int nstot =0
 
int npw =0
 
int * npw_per =nullptr
 
int npwtot =0
 
int nrxx =0
 
int * startz =nullptr
 
int * numz =nullptr
 
int * numg =nullptr
 
int * numr =nullptr
 
int * startg =nullptr
 
int * startr =nullptr
 
int startz_current =0
 
int nplane =0
 
ModuleBase::Vector3< double > * gdirect =nullptr
 
ModuleBase::Vector3< double > * gcar =nullptr
 
double * gg =nullptr
 
int ig_gge0 =-1
 
int ngg =0
 
int * ig2igg =nullptr
 
double * gg_uniq =nullptr
 
bool gamma_only = false
 only half g are used.
 
bool full_pw = false
 
double ggecut = 0.0
 Energy cut off for g^2/2 = ecutwfc(Ry)*lat0^2/4pi^2, unit in 1/lat0^2.
 
double gridecut_lat = 0.0
 Energy cut off for all fft grids = ecutrho(Ry)*lat0^2/4pi^2, unit in 1/lat0^2.
 
double lat0 = 1
 unit length for lattice, unit in bohr
 
double tpiba = 1
 2pi/lat0
 
double tpiba2 = 1
 4pi^2/lat0^2
 
ModuleBase::Matrix3 latvec
 Unitcell lattice vectors, unit in lat0.
 
ModuleBase::Matrix3 G
 reciprocal lattice vector, unit in 1/lat0
 
ModuleBase::Matrix3 GT
 traspose of G
 
ModuleBase::Matrix3 GGT
 GGT = G*GT.
 
double omega = 1.0
 volume of the cell
 
int distribution_type = 1
 distribution method
 
int full_pw_dim = 0
 
int poolnproc = 1
 
int poolrank = 0
 
int fftnx =0
 
int fftny =0
 
int fftnz =0
 
int fftnxyz =0
 
int fftnxy =0
 
int nx =0
 
int ny =0
 
int nz =0
 
int nxyz =0
 
int nxy =0
 
int liy =0
 
int riy =0
 
int lix =0
 
int rix =0
 
bool xprime = true
 
int ng_xeq0 = 0
 
int nmaxgr = 0
 
FFT_Bundle fft_bundle
 

Additional Inherited Members

- Public Types inherited from ModulePW::PW_Basis
using resmem_int_op = base_device::memory::resize_memory_op< int, base_device::DEVICE_GPU >
 
using delmem_int_op = base_device::memory::delete_memory_op< int, base_device::DEVICE_GPU >
 
using syncmem_int_h2d_op = base_device::memory::synchronize_memory_op< int, base_device::DEVICE_GPU, base_device::DEVICE_CPU >
 
- Protected Member Functions inherited from ModulePW::PW_Basis_Sup
void distribute_g (const ModulePW::PW_Basis *pw_rho)
 
void distribution_method3 (const ModulePW::PW_Basis *pw_rho)
 
void divide_sticks_3 (const int *st_length2D, const int *st_i, const int *st_j, const int *st_length, const int *fftixy2ip_s, const int &nx_s, const int &ny_s)
 
void get_ig2isz_is2fftixy (int *st_bottom2D, int *st_length2D, const ModulePW::PW_Basis *pw_rho)
 
- Protected Member Functions inherited from ModulePW::PW_Basis
void distribute_g ()
 distribute plane waves to different cores
 
void getstartgr ()
 
void distribution_method1 ()
 
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.
 
void distribution_method2 ()
 
void divide_sticks_2 ()
 (2) Devide the sticks to each core according to the number of sticks Sticks are in the order of ixy increasing.
 
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.
 
void get_ig2isz_is2fftixy (int *st_bottom, int *st_length)
 (5) Construct ig2isz, and is2fftixy.
 
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.
 
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 the order of ixy increasing.
 
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.
 
template<typename T >
void gatherp_scatters (std::complex< T > *in, std::complex< T > *out) const
 gather planes and scatter sticks
 
template<typename T >
void gathers_scatterp (std::complex< T > *in, std::complex< T > *out) const
 gather sticks and scatter planes
 
- Protected Attributes inherited from ModulePW::PW_Basis
int * startnsz_per =nullptr
 
std::string device = "cpu"
 cpu or gpu
 
std::string precision = "double"
 single, double, mixing
 
bool double_data_ = true
 if has double data
 
bool float_data_ = false
 if has float data
 

Constructor & Destructor Documentation

◆ PW_Basis_Big() [1/2]

ModulePW::PW_Basis_Big::PW_Basis_Big ( )
inline

◆ PW_Basis_Big() [2/2]

ModulePW::PW_Basis_Big::PW_Basis_Big ( std::string  device_,
std::string  precision_ 
)
inline

◆ ~PW_Basis_Big()

ModulePW::PW_Basis_Big::~PW_Basis_Big ( )
inline

Member Function Documentation

◆ autoset_big_cell_size()

void ModulePW::PW_Basis_Big::autoset_big_cell_size ( int &  b_size,
const int &  nc_size,
const int  nproc = 0 
)
inline
Here is the caller graph for this function:

◆ distribute_r()

virtual void ModulePW::PW_Basis_Big::distribute_r ( )
inlinevirtual

distribute real-space grids to different processors

Parameters
innx, ny, nz, poolnproc, poolrank
outnrxx, startz, numz

Reimplemented from ModulePW::PW_Basis.

Here is the call graph for this function:

◆ initgrids() [1/2]

virtual void ModulePW::PW_Basis_Big::initgrids ( const double  lat0_in,
const ModuleBase::Matrix3  latvec_in,
const double  gridecut 
)
inlinevirtual

Init the grids for FFT Input: lattice vectors of the cell, Energy cut off for G^2/2 Output: fftnx, fftny, fftnz, fftnxyz, latvec, G, GT, GGT

Reimplemented from ModulePW::PW_Basis.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ initgrids() [2/2]

virtual void ModulePW::PW_Basis_Big::initgrids ( const double  lat0_in,
const ModuleBase::Matrix3  latvec_in,
const int  nx_in,
int  ny_in,
int  nz_in 
)
inlinevirtual

Init the grids for FFT Input: lattice vectors of the cell, nx, ny, nz Output: nx, ny, nz, nxyz, latvec, G, GT, GGT

Reimplemented from ModulePW::PW_Basis.

Here is the call graph for this function:

◆ setbxyz()

void ModulePW::PW_Basis_Big::setbxyz ( const int  bx_in,
const int  by_in,
const int  bz_in 
)
inline
Here is the caller graph for this function:

Member Data Documentation

◆ bx

int ModulePW::PW_Basis_Big::bx = 1

◆ bxyz

int ModulePW::PW_Basis_Big::bxyz = 1

◆ by

int ModulePW::PW_Basis_Big::by = 1

◆ bz

int ModulePW::PW_Basis_Big::bz = 1

◆ nbx

int ModulePW::PW_Basis_Big::nbx =0

◆ nbxx

int ModulePW::PW_Basis_Big::nbxx =0

◆ nby

int ModulePW::PW_Basis_Big::nby =0

◆ nbz

int ModulePW::PW_Basis_Big::nbz =0

◆ nbzp

int ModulePW::PW_Basis_Big::nbzp =0

◆ nbzp_start

int ModulePW::PW_Basis_Big::nbzp_start =0

The documentation for this class was generated from the following file: