1#ifndef PSI_INITIALIZER_H
2#define PSI_INITIALIZER_H
92 typename std::enable_if<std::is_same<U, float>::value, U>::type
cast_to_T(
const std::complex<double> in)
94 return static_cast<float>(in.real());
97 typename std::enable_if<std::is_same<U, double>::value, U>::type
cast_to_T(
const std::complex<double> in)
99 return static_cast<double>(in.real());
101 template <
typename U>
102 typename std::enable_if<std::is_same<U, std::complex<float>>::value, U>::type
cast_to_T(
103 const std::complex<double> in)
105 return std::complex<float>(
static_cast<float>(in.real()),
static_cast<float>(in.imag()));
107 template <
typename U>
108 typename std::enable_if<std::is_same<U, std::complex<double>>::value, U>::type
cast_to_T(
109 const std::complex<double> in)
111 return std::complex<double>(in.real(), in.imag());
117 void stick_to_pool(Real* stick,
Special pw_basis class. It includes different k-points.
Definition pw_basis_k.h:56
Definition structure_factor.h:10
Definition psi_initializer.h:51
virtual ~psi_initializer()
Definition psi_initializer.h:57
double mixing_coef_
mixing coefficient for atomic+random and nao+random
Definition psi_initializer.h:136
std::string method_
method name
Definition psi_initializer.h:134
virtual void tabulate()
CENTRAL FUNCTION: calculate the interpolate table if needed.
Definition psi_initializer.h:68
const pseudopot_cell_vnl * p_pspot_nl_
pseudopot_cell_vnl
Definition psi_initializer.h:130
int nbands_start() const
Definition psi_initializer.h:82
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:108
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:86
int mem_saver_
if save memory, only for nscf
Definition psi_initializer.h:133
typename GetTypeReal< T >::type Real
Definition psi_initializer.h:53
int nbands_complem_
complement number of bands, which is nbands_start_ - ucell.natomwfc
Definition psi_initializer.h:135
std::vector< int > ixy2is_
used by stick_to_pool function
Definition psi_initializer.h:132
std::enable_if< std::is_same< U, double >::value, U >::type cast_to_T(const std::complex< double > in)
Definition psi_initializer.h:97
const K_Vectors * p_kv
Parallel_Kpoints.
Definition psi_initializer.h:129
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:92
std::string method() const
Definition psi_initializer.h:78
const Structure_Factor * sf_
Structure_Factor.
Definition psi_initializer.h:126
int nbands_start_
starting nbands, which is no less than PARAM.inp.nbands
Definition psi_initializer.h:137
const ModulePW::PW_Basis_K * pw_wfc_
use |k+G>, |G>, getgpluskcar and so on in PW_Basis_K
Definition psi_initializer.h:127
const UnitCell * p_ucell_
UnitCell.
Definition psi_initializer.h:128
psi_initializer()
Definition psi_initializer.h:56
int random_seed_
random seed, shared by random, atomic+random, nao+random
Definition psi_initializer.h:131
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:102
#define T
Definition exp.cpp:237
T type
Definition macros.h:8