ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
|
#include <VNL_in_pw.h>
Public Member Functions | |
pseudopot_cell_vnl () | |
~pseudopot_cell_vnl () | |
void | init (const UnitCell &cell, Structure_Factor *psf_in, const ModulePW::PW_Basis_K *wfc_basis=nullptr, const bool allocate_vkb=true) |
void | init_vnl (UnitCell &cell, const ModulePW::PW_Basis *rho_basis) |
void | rescale_vnl (const double &omega_in) |
template<typename FPTYPE , typename Device > | |
void | getvnl (Device *ctx, const UnitCell &ucell, const int &ik, std::complex< FPTYPE > *vkb_in) const |
void | init_vnl_alpha (const UnitCell &cell) |
void | initgradq_vnl (const UnitCell &cell) |
void | getgradq_vnl (const UnitCell &ucell, const int ik) |
std::complex< double > | Cal_C (int alpha, int lu, int mu, int L, int M) |
double | CG (int l1, int m1, int l2, int m2, int L, int M) |
void | print_vnl (std::ofstream &ofs) |
void | radial_fft_q (const int ng, const int ih, const int jh, const int itype, const double *qnorm, const ModuleBase::matrix ylm, std::complex< double > *qg) const |
Compute the radial Fourier transform of the Q functions. | |
template<typename FPTYPE , typename Device > | |
void | radial_fft_q (Device *ctx, const int ng, const int ih, const int jh, const int itype, const FPTYPE *qnorm, const FPTYPE *ylm, std::complex< FPTYPE > *qg) const |
void | cal_effective_D (const ModuleBase::matrix &veff, const ModulePW::PW_Basis *rho_basis, UnitCell &cell) |
calculate the effective coefficient matrix for non-local pseudopotential projectors | |
template<typename FPTYPE > | |
FPTYPE * | get_nhtol_data () const |
template<typename FPTYPE > | |
FPTYPE * | get_nhtolm_data () const |
template<typename FPTYPE > | |
FPTYPE * | get_indv_data () const |
template<typename FPTYPE > | |
FPTYPE * | get_tab_data () const |
template<typename FPTYPE > | |
FPTYPE * | get_deeq_data () const |
template<typename FPTYPE > | |
FPTYPE * | get_qq_nt_data () const |
template<typename FPTYPE > | |
std::complex< FPTYPE > * | get_qq_so_data () const |
template<typename FPTYPE > | |
std::complex< FPTYPE > * | get_vkb_data () const |
template<typename FPTYPE > | |
std::complex< FPTYPE > * | get_deeq_nc_data () const |
void | release_memory () |
template<> | |
std::complex< float > * | get_vkb_data () const |
template<> | |
std::complex< double > * | get_vkb_data () const |
template<> | |
float * | get_nhtol_data () const |
template<> | |
double * | get_nhtol_data () const |
template<> | |
float * | get_nhtolm_data () const |
template<> | |
double * | get_nhtolm_data () const |
template<> | |
float * | get_indv_data () const |
template<> | |
double * | get_indv_data () const |
template<> | |
float * | get_tab_data () const |
template<> | |
double * | get_tab_data () const |
template<> | |
float * | get_deeq_data () const |
template<> | |
double * | get_deeq_data () const |
template<> | |
float * | get_qq_nt_data () const |
template<> | |
double * | get_qq_nt_data () const |
template<> | |
std::complex< float > * | get_vkb_data () const |
template<> | |
std::complex< double > * | get_vkb_data () const |
template<> | |
std::complex< float > * | get_deeq_nc_data () const |
template<> | |
std::complex< double > * | get_deeq_nc_data () const |
template<> | |
std::complex< float > * | get_qq_so_data () const |
template<> | |
std::complex< double > * | get_qq_so_data () const |
Private Member Functions | |
void | compute_qrad (UnitCell &cell) |
Compute interpolation table qrad. | |
void | newq (const ModuleBase::matrix &veff, const ModulePW::PW_Basis *rho_basis, UnitCell &cell) |
computes the integral of the effective potential with the Q function | |
void | newd_so (const int &iat, UnitCell &cell) |
calculate D functions in the soc case when tvanp is true | |
void | newd_nc (const int &iat, UnitCell &cell) |
calculate D functions in the noncolin case when tvanp is true | |
Private Attributes | |
bool | memory_released = false |
float * | s_nhtol = nullptr |
float * | s_nhtolm = nullptr |
float * | s_indv = nullptr |
float * | s_tab = nullptr |
std::complex< float > * | c_vkb = nullptr |
double * | d_nhtol = nullptr |
double * | d_nhtolm = nullptr |
double * | d_indv = nullptr |
double * | d_tab = nullptr |
std::complex< double > * | z_vkb = nullptr |
const ModulePW::PW_Basis_K * | wfcpw = nullptr |
Soc | soc |
double | omega_old = 0 |
bool | use_gpu_ = false |
pseudopot_cell_vnl::pseudopot_cell_vnl | ( | ) |
pseudopot_cell_vnl::~pseudopot_cell_vnl | ( | ) |
std::complex< double > pseudopot_cell_vnl::Cal_C | ( | int | alpha, |
int | lu, | ||
int | mu, | ||
int | L, | ||
int | M | ||
) |
void pseudopot_cell_vnl::cal_effective_D | ( | const ModuleBase::matrix & | veff, |
const ModulePW::PW_Basis * | rho_basis, | ||
UnitCell & | cell | ||
) |
calculate the effective coefficient matrix for non-local pseudopotential projectors
veff | effective potential |
rho_basis | potential FFT grids |
cell | UnitCell |
double pseudopot_cell_vnl::CG | ( | int | l1, |
int | m1, | ||
int | l2, | ||
int | m2, | ||
int | L, | ||
int | M | ||
) |
|
private |
Compute interpolation table qrad.
Compute interpolation table qrad(i,nm,l,nt) = Q^{(L)}_{nm,nt}(q_i) of angular momentum L, for atom of type nt, on grid q_i, where nm = combined index for n,m=1,nh(nt)
cell | UnitCell |
float * pseudopot_cell_vnl::get_deeq_data | ( | ) | const |
double * pseudopot_cell_vnl::get_deeq_data | ( | ) | const |
FPTYPE * pseudopot_cell_vnl::get_deeq_data | ( | ) | const |
std::complex< float > * pseudopot_cell_vnl::get_deeq_nc_data | ( | ) | const |
std::complex< double > * pseudopot_cell_vnl::get_deeq_nc_data | ( | ) | const |
std::complex< FPTYPE > * pseudopot_cell_vnl::get_deeq_nc_data | ( | ) | const |
float * pseudopot_cell_vnl::get_indv_data | ( | ) | const |
double * pseudopot_cell_vnl::get_indv_data | ( | ) | const |
FPTYPE * pseudopot_cell_vnl::get_indv_data | ( | ) | const |
float * pseudopot_cell_vnl::get_nhtol_data | ( | ) | const |
double * pseudopot_cell_vnl::get_nhtol_data | ( | ) | const |
FPTYPE * pseudopot_cell_vnl::get_nhtol_data | ( | ) | const |
float * pseudopot_cell_vnl::get_nhtolm_data | ( | ) | const |
double * pseudopot_cell_vnl::get_nhtolm_data | ( | ) | const |
FPTYPE * pseudopot_cell_vnl::get_nhtolm_data | ( | ) | const |
float * pseudopot_cell_vnl::get_qq_nt_data | ( | ) | const |
double * pseudopot_cell_vnl::get_qq_nt_data | ( | ) | const |
FPTYPE * pseudopot_cell_vnl::get_qq_nt_data | ( | ) | const |
std::complex< float > * pseudopot_cell_vnl::get_qq_so_data | ( | ) | const |
std::complex< double > * pseudopot_cell_vnl::get_qq_so_data | ( | ) | const |
std::complex< FPTYPE > * pseudopot_cell_vnl::get_qq_so_data | ( | ) | const |
float * pseudopot_cell_vnl::get_tab_data | ( | ) | const |
double * pseudopot_cell_vnl::get_tab_data | ( | ) | const |
FPTYPE * pseudopot_cell_vnl::get_tab_data | ( | ) | const |
std::complex< float > * pseudopot_cell_vnl::get_vkb_data | ( | ) | const |
std::complex< double > * pseudopot_cell_vnl::get_vkb_data | ( | ) | const |
std::complex< float > * pseudopot_cell_vnl::get_vkb_data | ( | ) | const |
std::complex< double > * pseudopot_cell_vnl::get_vkb_data | ( | ) | const |
std::complex< FPTYPE > * pseudopot_cell_vnl::get_vkb_data | ( | ) | const |
void pseudopot_cell_vnl::getgradq_vnl | ( | const UnitCell & | ucell, |
const int | ik | ||
) |
void pseudopot_cell_vnl::getvnl | ( | Device * | ctx, |
const UnitCell & | ucell, | ||
const int & | ik, | ||
std::complex< FPTYPE > * | vkb_in | ||
) | const |
void pseudopot_cell_vnl::init | ( | const UnitCell & | cell, |
Structure_Factor * | psf_in, | ||
const ModulePW::PW_Basis_K * | wfc_basis = nullptr , |
||
const bool | allocate_vkb = true |
||
) |
void pseudopot_cell_vnl::init_vnl | ( | UnitCell & | cell, |
const ModulePW::PW_Basis * | rho_basis | ||
) |
void pseudopot_cell_vnl::init_vnl_alpha | ( | const UnitCell & | cell | ) |
void pseudopot_cell_vnl::initgradq_vnl | ( | const UnitCell & | cell | ) |
|
private |
calculate D functions in the noncolin case when tvanp is true
iat | the index of atom |
cell | UnitCell |
|
private |
calculate D functions in the soc case when tvanp is true
iat | the index of atom |
cell | UnitCell |
|
private |
computes the integral of the effective potential with the Q function
veff | effective potential |
rho_basis | potential FFT grids |
cell | UnitCell |
void pseudopot_cell_vnl::print_vnl | ( | std::ofstream & | ofs | ) |
void pseudopot_cell_vnl::radial_fft_q | ( | const int | ng, |
const int | ih, | ||
const int | jh, | ||
const int | itype, | ||
const double * | qnorm, | ||
const ModuleBase::matrix | ylm, | ||
std::complex< double > * | qg | ||
) | const |
Compute the radial Fourier transform of the Q functions.
The interpolation table for the radial Fourier transform is stored in qrad.
The formula implemented here is: [ q(g,i,j) = \sum_\text{lm} (-i)^l \text{ap}(\text{lm},i,j) \text{yr}_\text{lm}(g) \text{qrad}(g,l,i,j) ]
ng | [in] the number of G vectors |
ih | [in] the first index of Q |
jh | [in] the second index of Q |
itype | [in] the atomic type |
qnorm | [in] the norm of q+g vectors |
ylm | [in] the real spherical harmonics |
qg | [out] the Fourier transform of interest |
void pseudopot_cell_vnl::radial_fft_q | ( | Device * | ctx, |
const int | ng, | ||
const int | ih, | ||
const int | jh, | ||
const int | itype, | ||
const FPTYPE * | qnorm, | ||
const FPTYPE * | ylm, | ||
std::complex< FPTYPE > * | qg | ||
) | const |
void pseudopot_cell_vnl::release_memory | ( | ) |
void pseudopot_cell_vnl::rescale_vnl | ( | const double & | omega_in | ) |
ModuleBase::realArray pseudopot_cell_vnl::ap |
std::complex<float>* pseudopot_cell_vnl::c_deeq_nc = nullptr |
std::complex<float>* pseudopot_cell_vnl::c_qq_so = nullptr |
|
private |
double pseudopot_cell_vnl::cell_factor = 0.0 |
double* pseudopot_cell_vnl::d_deeq = nullptr |
|
private |
|
private |
|
private |
double* pseudopot_cell_vnl::d_qq_nt = nullptr |
|
private |
ModuleBase::realArray pseudopot_cell_vnl::deeq |
ModuleBase::ComplexArray pseudopot_cell_vnl::deeq_nc |
ModuleBase::realArray pseudopot_cell_vnl::dvan |
ModuleBase::ComplexArray pseudopot_cell_vnl::dvan_so |
|
mutable |
ModuleBase::IntArray pseudopot_cell_vnl::ijtoh |
ModuleBase::matrix pseudopot_cell_vnl::indv |
int* pseudopot_cell_vnl::indv_ijkb0 = nullptr |
int pseudopot_cell_vnl::lmaxkb = 0 |
int pseudopot_cell_vnl::lmaxq = 0 |
ModuleBase::IntArray pseudopot_cell_vnl::lpl |
ModuleBase::IntArray pseudopot_cell_vnl::lpx |
|
private |
bool pseudopot_cell_vnl::multi_proj = false |
int pseudopot_cell_vnl::nbetam = 0 |
int pseudopot_cell_vnl::nhm = 0 |
ModuleBase::matrix pseudopot_cell_vnl::nhtoj |
ModuleBase::matrix pseudopot_cell_vnl::nhtol |
ModuleBase::matrix pseudopot_cell_vnl::nhtolm |
int pseudopot_cell_vnl::nkb = 0 |
|
private |
Structure_Factor* pseudopot_cell_vnl::psf = nullptr |
ModuleBase::realArray pseudopot_cell_vnl::qq_at |
ModuleBase::realArray pseudopot_cell_vnl::qq_nt |
ModuleBase::ComplexArray pseudopot_cell_vnl::qq_so |
ModuleBase::realArray pseudopot_cell_vnl::qrad |
float* pseudopot_cell_vnl::s_deeq = nullptr |
|
private |
|
private |
|
private |
float* pseudopot_cell_vnl::s_qq_nt = nullptr |
|
private |
|
private |
ModuleBase::realArray pseudopot_cell_vnl::tab |
ModuleBase::realArray pseudopot_cell_vnl::tab_alpha |
ModuleBase::realArray pseudopot_cell_vnl::tab_at |
ModuleBase::realArray pseudopot_cell_vnl::tab_dq |
|
private |
|
mutable |
std::complex<double>*** pseudopot_cell_vnl::vkb1_alpha |
std::complex<double>*** pseudopot_cell_vnl::vkb_alpha |
|
private |
std::complex<double>* pseudopot_cell_vnl::z_deeq_nc = nullptr |
std::complex<double>* pseudopot_cell_vnl::z_qq_so = nullptr |
|
private |