ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
|
#include <to_qo.h>
Public Member Functions | |
toQO (const std::string &qo_basis, const std::vector< std::string > &strategies, const double &qo_thr, const std::vector< double > &screening_coeffs) | |
~toQO () | |
void | initialize (const std::string &out_dir, const std::string &pseudo_dir, const std::string &orbital_dir, const UnitCell *p_ucell, const std::vector< ModuleBase::Vector3< double > > &kvecs_d, std::ofstream &ofs_running, const int &rank, const int &nranks) |
void | read_structures (const UnitCell *p_ucell, const std::vector< ModuleBase::Vector3< double > > &kvecs_d, const int &iproc, const int &nprocs) |
void | build_nao (const int ntype, const std::string orbital_dir, const std::string *const orbital_fn, const int rank) |
void | build_ao (const int ntype, const std::string pseudo_dir, const std::string *const pspot_fn=nullptr, const std::vector< double > screening_coeffs=std::vector< double >(), const double qo_thr=1e-10, const std::ofstream &ofs=std::ofstream(), const int rank=0) |
void | build_hydrogen (const int ntype, const double *const charges, const bool slater_screening, const int *const nmax, const double qo_thr, const int rank) |
void | build_pswfc (const int ntype, const std::string pseudo_dir, const std::string *const pspot_fn, const double *const screening_coeffs, const double qo_thr, const int rank) |
void | build_szv () |
void | calculate () |
void | calculate_ovlpR (const int iR) |
void | calculate_ovlpk (int ik) |
template<typename T > | |
void | write_ovlp (const std::string &dir, const std::vector< T > &matrix, const int &nrows, const int &ncols, const bool &is_R=false, const int &imat=0) |
void | read_ovlp (const std::string &dir, const int &nrows, const int &ncols, const bool &is_R=false, const int &imat=0) |
void | radialcollection_indexing (const RadialCollection &, const std::vector< int > &, const bool &, std::map< std::tuple< int, int, int, int, int >, int > &, std::map< int, std::tuple< int, int, int, int, int > > &) |
build bidirectional map indexing for one single RadialCollection object, which is an axis of two-center-integral table. | |
ModuleBase::Vector3< double > | cal_two_center_vector (ModuleBase::Vector3< double > rij, ModuleBase::Vector3< int > R) |
calculate vectors connecting all atom pairs that needed to calculate their overlap | |
bool | orbital_filter_out (const int &itype, const int &l, const int &izeta) |
when indexing, select where one orbital is really included in the two-center integral | |
void | deallocate_ovlp (const bool &is_R=false) |
void | allocate_ovlp (const bool &is_R=false) |
void | zero_out_ovlps (const bool &is_R) |
void | append_ovlpR_eiRk (int ik, int iR) |
void | scan_supercell (const int &iproc, const int &nprocs) |
get all possible (n1n2n3) defining supercell and scatter if MPI enabled | |
std::vector< ModuleBase::Vector3< int > > | scan_supercell_for_atom (int it, int ia, int start_it=0, int start_ia=0) |
this is a basic functional for scanning (ijR) pair for one certain i, return Rs | |
std::vector< int > | rcut_to_supercell_index (double rcut, ModuleBase::Vector3< double > a, ModuleBase::Vector3< double > b, ModuleBase::Vector3< double > c) |
core algorithm to scan supercells, find the maximal supercell according to present cutoff radius | |
double | norm2_rij_supercell (ModuleBase::Vector3< double > rij, int n1, int n2, int n3) |
get vector squared norm in supercell | |
template<typename T > | |
void | eliminate_duplicate_vector3 (std::vector< ModuleBase::Vector3< T > > &vector3s) |
eliminate duplicate vectors in a vector of vector3 | |
void | write_supercells () |
write supercells information to file | |
int | ntype () const |
int | nks () const |
std::string | qo_basis () const |
std::vector< std::string > | strategies () const |
std::string | strategy (const int itype) const |
UnitCell * | p_ucell () const |
RadialCollection * | p_nao () const |
RadialCollection * | p_ao () const |
int | nR () const |
int | nchi () const |
int | nphi () const |
std::vector< ModuleBase::Vector3< int > > | supercells () const |
std::vector< double > | ovlpR () const |
double | ovlpR (const int i, const int j) const |
std::vector< std::complex< double > > | ovlpk () const |
std::complex< double > | ovlpk (const int i, const int j) const |
std::vector< std::string > | symbols () const |
std::vector< double > | charges () const |
atom_in | atom_database () const |
std::vector< ModuleBase::Vector3< double > > | kvecs_d () const |
Static Public Member Functions | |
static void | bcast_stdvector_ofvector3int (std::vector< ModuleBase::Vector3< int > > &vec, const int rank) |
static void | bcast_stdvector_ofvector3double (std::vector< ModuleBase::Vector3< double > > &vec, const int rank) |
Private Attributes | |
std::string | qo_basis_ = "hydrogen" |
std::vector< std::string > | strategies_ |
double | qo_thr_ = 1e-10 |
std::vector< double > | screening_coeffs_ |
std::string | out_dir_ |
std::string | pseudo_dir_ |
std::string | orbital_dir_ |
int | iproc_ = 0 |
int | nprocs_ = 1 |
const UnitCell * | p_ucell_ = nullptr |
std::vector< int > | iRs_ |
std::vector< ModuleBase::Vector3< int > > | supercells_ |
std::vector< int > | iks_ |
std::vector< ModuleBase::Vector3< double > > | kvecs_d_ |
std::unique_ptr< RadialCollection > | nao_ |
std::unique_ptr< RadialCollection > | ao_ |
std::unique_ptr< TwoCenterIntegrator > | overlap_calculator_ |
std::vector< double > | ovlpR_ |
std::vector< std::complex< double > > | ovlpk_ |
std::map< std::tuple< int, int, int, int, int >, int > | index_ao_ |
std::map< int, std::tuple< int, int, int, int, int > > | rindex_ao_ |
std::map< std::tuple< int, int, int, int, int >, int > | index_nao_ |
std::map< int, std::tuple< int, int, int, int, int > > | rindex_nao_ |
int | nks_ = 0 |
int | nks_tot_ = 0 |
int | nR_ = 0 |
int | nR_tot_ = 0 |
int | nchi_ = 0 |
int | nphi_ = 0 |
atom_in | atom_database_ |
int | ntype_ = 0 |
std::vector< int > | na_ |
std::vector< std::string > | symbols_ |
std::vector< double > | charges_ |
std::vector< int > | nmax_ |
toQO::toQO | ( | const std::string & | qo_basis, |
const std::vector< std::string > & | strategies, | ||
const double & | qo_thr, | ||
const std::vector< double > & | screening_coeffs | ||
) |
toQO::~toQO | ( | ) |
void toQO::allocate_ovlp | ( | const bool & | is_R = false | ) |
void toQO::append_ovlpR_eiRk | ( | int | ik, |
int | iR | ||
) |
|
inline |
|
static |
|
static |
void toQO::build_ao | ( | const int | ntype, |
const std::string | pseudo_dir, | ||
const std::string *const | pspot_fn = nullptr , |
||
const std::vector< double > | screening_coeffs = std::vector<double>() , |
||
const double | qo_thr = 1e-10 , |
||
const std::ofstream & | ofs = std::ofstream() , |
||
const int | rank = 0 |
||
) |
ntype
charges
slater_screening
nmax
qo_thr
rank
ntype
pseudo_dir
pspot_fn
screening_coeffs
qo_thr
rank
void toQO::build_hydrogen | ( | const int | ntype, |
const double *const | charges, | ||
const bool | slater_screening, | ||
const int *const | nmax, | ||
const double | qo_thr, | ||
const int | rank | ||
) |
void toQO::build_nao | ( | const int | ntype, |
const std::string | orbital_dir, | ||
const std::string *const | orbital_fn, | ||
const int | rank | ||
) |
void toQO::build_pswfc | ( | const int | ntype, |
const std::string | pseudo_dir, | ||
const std::string *const | pspot_fn, | ||
const double *const | screening_coeffs, | ||
const double | qo_thr, | ||
const int | rank | ||
) |
void toQO::build_szv | ( | ) |
ModuleBase::Vector3< double > toQO::cal_two_center_vector | ( | ModuleBase::Vector3< double > | rij, |
ModuleBase::Vector3< int > | R | ||
) |
calculate vectors connecting all atom pairs that needed to calculate their overlap
void toQO::calculate | ( | ) |
void toQO::calculate_ovlpk | ( | int | ik | ) |
void toQO::calculate_ovlpR | ( | const int | iR | ) |
|
inline |
void toQO::deallocate_ovlp | ( | const bool & | is_R = false | ) |
template void toQO::eliminate_duplicate_vector3< int > | ( | std::vector< ModuleBase::Vector3< T > > & | vector3s | ) |
eliminate duplicate vectors in a vector of vector3
void toQO::initialize | ( | const std::string & | out_dir, |
const std::string & | pseudo_dir, | ||
const std::string & | orbital_dir, | ||
const UnitCell * | p_ucell, | ||
const std::vector< ModuleBase::Vector3< double > > & | kvecs_d, | ||
std::ofstream & | ofs_running, | ||
const int & | rank, | ||
const int & | nranks | ||
) |
|
inline |
|
inline |
|
inline |
double toQO::norm2_rij_supercell | ( | ModuleBase::Vector3< double > | rij, |
int | n1, | ||
int | n2, | ||
int | n3 | ||
) |
get vector squared norm in supercell
|
inline |
|
inline |
|
inline |
bool toQO::orbital_filter_out | ( | const int & | itype, |
const int & | l, | ||
const int & | izeta | ||
) |
when indexing, select where one orbital is really included in the two-center integral
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
void toQO::radialcollection_indexing | ( | const RadialCollection & | radcol, |
const std::vector< int > & | natoms, | ||
const bool & | with_filter, | ||
std::map< std::tuple< int, int, int, int, int >, int > & | index_map, | ||
std::map< int, std::tuple< int, int, int, int, int > > & | index_map_reverse | ||
) |
build bidirectional map indexing for one single RadialCollection object, which is an axis of two-center-integral table.
from (it,ia,l,zeta,m) to index and vice versa
std::vector< int > toQO::rcut_to_supercell_index | ( | double | rcut, |
ModuleBase::Vector3< double > | a, | ||
ModuleBase::Vector3< double > | b, | ||
ModuleBase::Vector3< double > | c | ||
) |
core algorithm to scan supercells, find the maximal supercell according to present cutoff radius
void toQO::read_ovlp | ( | const std::string & | dir, |
const int & | nrows, | ||
const int & | ncols, | ||
const bool & | is_R = false , |
||
const int & | imat = 0 |
||
) |
void toQO::read_structures | ( | const UnitCell * | p_ucell, |
const std::vector< ModuleBase::Vector3< double > > & | kvecs_d, | ||
const int & | iproc, | ||
const int & | nprocs | ||
) |
void toQO::scan_supercell | ( | const int & | iproc, |
const int & | nprocs | ||
) |
get all possible (n1n2n3) defining supercell and scatter if MPI enabled
std::vector< ModuleBase::Vector3< int > > toQO::scan_supercell_for_atom | ( | int | it, |
int | ia, | ||
int | start_it = 0 , |
||
int | start_ia = 0 |
||
) |
this is a basic functional for scanning (ijR) pair for one certain i, return Rs
|
inline |
|
inline |
|
inline |
|
inline |
template void toQO::write_ovlp< double > | ( | const std::string & | dir, |
const std::vector< T > & | matrix, | ||
const int & | nrows, | ||
const int & | ncols, | ||
const bool & | is_R = false , |
||
const int & | imat = 0 |
||
) |
void toQO::write_supercells | ( | ) |
write supercells information to file
void toQO::zero_out_ovlps | ( | const bool & | is_R | ) |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |