1#ifndef PSI_INITIALIZER_H
2#define PSI_INITIALIZER_H
94 typename std::enable_if<std::is_same<U, float>::value, U>::type
cast_to_T(
const std::complex<double> in)
96 return static_cast<float>(in.real());
99 typename std::enable_if<std::is_same<U, double>::value, U>::type
cast_to_T(
const std::complex<double> in)
101 return static_cast<double>(in.real());
103 template <
typename U>
104 typename std::enable_if<std::is_same<U, std::complex<float>>::value, U>::type
cast_to_T(
105 const std::complex<double> in)
107 return std::complex<float>(
static_cast<float>(in.real()),
static_cast<float>(in.imag()));
109 template <
typename U>
110 typename std::enable_if<std::is_same<U, std::complex<double>>::value, U>::type
cast_to_T(
111 const std::complex<double> in)
113 return std::complex<double>(in.real(), in.imag());
119 void stick_to_pool(Real* stick,
Special pw_basis class. It includes different k-points.
Definition pw_basis_k.h:57
Definition structure_factor.h:11
Definition VNL_in_pw.h:21
Definition psi_initializer.h:53
virtual ~psi_initializer()
Definition psi_initializer.h:59
double mixing_coef_
mixing coefficient for atomic+random and nao+random
Definition psi_initializer.h:138
std::string method_
method name
Definition psi_initializer.h:136
virtual void tabulate()
CENTRAL FUNCTION: calculate the interpolate table if needed.
Definition psi_initializer.h:70
const pseudopot_cell_vnl * p_pspot_nl_
pseudopot_cell_vnl
Definition psi_initializer.h:132
int nbands_start() const
Definition psi_initializer.h:84
std::enable_if< std::is_same< U, std::complex< double > >::value, U >::type cast_to_T(const std::complex< double > in)
Definition psi_initializer.h:110
virtual void initialize(const Structure_Factor *, const ModulePW::PW_Basis_K *, const UnitCell *, const K_Vectors *=nullptr, const int &=1, const pseudopot_cell_vnl *=nullptr, const int &=0)
initialize the psi_initializer with external data and methods
Definition psi_initializer.cpp:16
void random_t(T *psi, const int iw_start, const int iw_end, const int ik, const int mode=1)
mode, 0 for rr*exp(i*arg), 1 for rr/(1+gk2)*exp(i*arg)
Definition psi_initializer.cpp:33
int nbands_complem() const
Definition psi_initializer.h:88
int mem_saver_
if save memory, only for nscf
Definition psi_initializer.h:135
typename GetTypeReal< T >::type Real
Definition psi_initializer.h:55
int nbands_complem_
complement number of bands, which is nbands_start_ - ucell.natomwfc
Definition psi_initializer.h:137
std::vector< int > ixy2is_
used by stick_to_pool function
Definition psi_initializer.h:134
std::enable_if< std::is_same< U, double >::value, U >::type cast_to_T(const std::complex< double > in)
Definition psi_initializer.h:99
const K_Vectors * p_kv
Parallel_Kpoints.
Definition psi_initializer.h:131
virtual void init_psig(T *psig, const int &ik)=0
CENTRAL FUNCTION: init psi in pw basis.
std::enable_if< std::is_same< U, float >::value, U >::type cast_to_T(const std::complex< double > in)
Definition psi_initializer.h:94
std::string method() const
Definition psi_initializer.h:80
const Structure_Factor * sf_
Structure_Factor.
Definition psi_initializer.h:128
int nbands_start_
starting nbands, which is no less than PARAM.inp.nbands
Definition psi_initializer.h:139
const ModulePW::PW_Basis_K * pw_wfc_
use |k+G>, |G>, getgpluskcar and so on in PW_Basis_K
Definition psi_initializer.h:129
const UnitCell * p_ucell_
UnitCell.
Definition psi_initializer.h:130
psi_initializer()
Definition psi_initializer.h:58
int random_seed_
random seed, shared by random, atomic+random, nao+random
Definition psi_initializer.h:133
std::enable_if< std::is_same< U, std::complex< float > >::value, U >::type cast_to_T(const std::complex< double > in)
Definition psi_initializer.h:104
#define T
Definition exp.cpp:237
T type
Definition macros.h:8