10 std::cout << label <<
"\n";
11 for (
int ia = 0;ia < nat;ia++)
12 for (
int ja = 0;ja < nat;ja++)
15 for (
int iR = 0;iR < ap->get_R_size();++iR)
17 std::cout <<
"atom pair (" << ia <<
", " << ja <<
"), "
18 <<
"R=(" << ap->get_R_index(iR)[0] <<
", " << ap->get_R_index(iR)[1] <<
", " << ap->get_R_index(iR)[2] <<
"): \n";
19 auto& mat = ap->get_HR_values(iR);
20 std::cout <<
"rowsize=" << ap->get_row_size() <<
", colsize=" << ap->get_col_size() <<
"\n";
21 for (
int i = 0;i < ap->get_row_size();++i)
23 for (
int j = 0;j < ap->get_col_size();++j)
25 auto& v = mat.get_value(i, j);
26 std::cout << (std::abs(v) >
threshold ? v : 0) <<
" ";
33 template <
typename TK,
typename TR>
36 std::cout << label <<
"\n";
44 const char& type =
'R');
48 const char& type =
'R');
50 template <
typename T,
typename TR>
54 const std::vector<double>& orb_cutoff)
57 for (
int iat1 = 0; iat1 < ucell.
nat; iat1++)
59 auto tau1 = ucell.
get_tau(iat1);
64 for (
int ad = 0; ad < adjs.
adj_num + 1; ++ad)
66 const int T2 = adjs.
ntype[ad];
67 const int I2 = adjs.
natom[ad];
69 if (pmat.get_row_size(iat1) <= 0 || pmat.get_col_size(iat2) <= 0) {
continue; }
71 if (ucell.
cal_dtau(iat1, iat2, R_index).
norm() * ucell.
lat0 >= orb_cutoff[T1] + orb_cutoff[T2]) {
continue; }
78 if (std::is_same<T, double>::value) { hR.
fix_gamma(); }
80 template <
typename T,
typename TR>
85 const std::vector<double>& orb_cutoff)
88 initialize_HR<T, TR>(hR_tmp, ucell, gd, orb_cutoff);
93 template<
typename TR1,
typename TR2>
99 for (
int iat1 = 0;iat1 < nat;++iat1)
101 for (
int iat2 = 0;iat2 < nat;++iat2)
104 if (!ap1) {
continue; }
107 for (
int iR = 0;iR < ap1->get_R_size();++iR)
110 auto mat1 = ap1->get_HR_values(R.
x, R.
y, R.
z);
111 auto mat2 = ap2->get_HR_values(R.
x, R.
y, R.
z);
112 sum += std::inner_product(mat1.get_pointer(), mat1.get_pointer() + mat1.get_memory_size(), mat2.get_pointer(), (TR1)0.0);
Definition sltk_grid_driver.h:20
int adj_num
Definition sltk_grid_driver.h:25
std::vector< ModuleBase::Vector3< int > > box
Definition sltk_grid_driver.h:29
std::vector< int > ntype
Definition sltk_grid_driver.h:26
std::vector< int > natom
Definition sltk_grid_driver.h:27
Definition sltk_grid_driver.h:43
void Find_atom(const UnitCell &ucell, const int ntype, const int nnumber, AdjacentAtomInfo *adjs=nullptr) const
Definition sltk_grid_driver.cpp:25
3 elements vector
Definition vector3.h:22
T x
Definition vector3.h:24
T norm(void) const
Get the norm of a Vector3.
Definition vector3.h:187
T y
Definition vector3.h:25
T z
Definition vector3.h:26
Definition parallel_orbitals.h:9
const ModuleBase::Vector3< double > & get_tau(const int &iat) const
Definition unitcell.h:149
double & lat0
Definition unitcell.h:28
ModuleBase::IntArray & itia2iat
Definition unitcell.h:51
int & nat
Definition unitcell.h:46
const ModuleBase::Vector3< double > cal_dtau(const int &iat1, const int &iat2, const ModuleBase::Vector3< int > &R) const
Definition unitcell.h:155
bool iat2iait(const Tiat iat, Tiait *ia, Tiait *it) const
Definition unitcell.h:89
Definition density_matrix.h:36
const std::vector< hamilt::HContainer< TR > * > & get_DMR_vector() const
get pointer vector of DMR
Definition density_matrix.h:145
void init_DMR(const Grid_Driver *GridD_in, const UnitCell *ucell)
initialize density matrix DMR from UnitCell
Definition density_matrix_io.cpp:15
Definition atom_pair.h:42
Definition hcontainer.h:144
void fix_gamma()
restrict R indexes of all atom-pair to 0, 0, 0 add BaseMatrix<T> with non-zero R index to this->atom_...
Definition hcontainer.cpp:462
void insert_pair(const AtomPair< T > &atom_ij)
a AtomPair object can be inserted into HContainer, two steps: 1, find AtomPair with atom index atom_i...
Definition hcontainer.cpp:624
void allocate(T *data_array=nullptr, bool if_zero=false)
allocate memory for all <IJR> matrix if data_array is not nullptr, use memory after data_array for ea...
Definition hcontainer.cpp:175
const Parallel_Orbitals * get_paraV() const
get parallel orbital pointer to check parallel information
Definition hcontainer.h:192
AtomPair< T > * find_pair(int i, int j) const
find AtomPair with atom index atom_i and atom_j This interface can be used to find AtomPair,...
Definition hcontainer.cpp:219
TR1 dot_R_matrix(const hamilt::HContainer< TR1 > &h1, const hamilt::HContainer< TR2 > &h2, const int &nat)
$\sum_{uvR} H1_{uv}(R) H2_{uv}(R)$
Definition lr_util_hcontainer.h:94
void initialize_DMR(elecstate::DensityMatrix< T, TR > &dm, const Parallel_Orbitals &pmat, const UnitCell &ucell, const Grid_Driver &gd, const std::vector< double > &orb_cutoff)
Definition lr_util_hcontainer.h:81
void set_HR_real_imag_part(const hamilt::HContainer< double > &HR_real, hamilt::HContainer< std::complex< double > > &HR, const int &nat, const char &type)
Definition lr_util_hcontainer.cpp:35
void print_HR(const hamilt::HContainer< TR > &HR, const int &nat, const std::string &label, const double &threshold=1e-10)
Definition lr_util_hcontainer.h:8
void get_DMR_real_imag_part(const elecstate::DensityMatrix< std::complex< double >, std::complex< double > > &DMR, elecstate::DensityMatrix< std::complex< double >, double > &DMR_real, const int &nat, const char &type)
Definition lr_util_hcontainer.cpp:4
void print_DMR(const elecstate::DensityMatrix< TK, TR > &DMR, const int &nat, const std::string &label, const double &threshold=1e-10)
Definition lr_util_hcontainer.h:34
void initialize_HR(hamilt::HContainer< TR > &hR, const UnitCell &ucell, const Grid_Driver &gd, const std::vector< double > &orb_cutoff)
Definition lr_util_hcontainer.h:51
void reduce_all(T &object)
reduce in all process
Definition depend_mock.cpp:14
#define threshold
Definition sph_bessel_recursive_test.cpp:4