Skip to content

Commit

Permalink
Refactor: change R_index in class AtomPair to type `ModuleBase::v…
Browse files Browse the repository at this point in the history
…ector3<int>` (#4243)

* Refactor `R_index` in `AtomPair`

* fix a semicolon

* small fix

* remove useless line

* Refactor `find_R` and `find_matrix`

* Refactor `AtomPair` constructor

* Refactor `get_R_index` to return reference

* rollback

---------

Co-authored-by: Mohan Chen <[email protected]>
  • Loading branch information
DylanWRh and mohanchen committed Jun 13, 2024
1 parent c557163 commit 156dac2
Show file tree
Hide file tree
Showing 23 changed files with 290 additions and 140 deletions.
6 changes: 4 additions & 2 deletions source/module_base/vector3.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,10 @@ template <class T> class Vector3
* @param z1
*/
Vector3(const T &x1 = 0, const T &y1 = 0, const T &z1 = 0) : x(x1), y(y1), z(z1){};
Vector3(const Vector3<T> &v) : x(v.x), y(v.y), z(v.z){}; // Peize Lin add 2018-07-16
explicit Vector3(const std::array<T,3> &v) :x(v[0]), y(v[1]), z(v[2]){}
Vector3(const Vector3<T> &v) : x(v.x), y(v.y), z(v.z){}; // Peize Lin add 2018-07-16
explicit Vector3(const std::array<T,3> &v) :x(v[0]), y(v[1]), z(v[2]){}

Vector3(Vector3<T> &&v) noexcept : x(v.x), y(v.y), z(v.z) {}

/**
* @brief set a 3d vector
Expand Down
26 changes: 13 additions & 13 deletions source/module_elecstate/module_dm/density_matrix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ void DensityMatrix<TK, TR>::init_DMR(Grid_Driver* GridD_in, const UnitCell* ucel
}
ModuleBase::Vector3<int>& R_index = adjs.box[ad];
// std::cout << "R_index: " << R_index.x << " " << R_index.y << " " << R_index.z << std::endl;
hamilt::AtomPair<TR> tmp_ap(iat1, iat2, R_index.x, R_index.y, R_index.z, this->_paraV);
hamilt::AtomPair<TR> tmp_ap(iat1, iat2, R_index, this->_paraV);
tmp_DMR->insert_pair(tmp_ap);
}
}
Expand Down Expand Up @@ -237,8 +237,8 @@ void DensityMatrix<TK, TR>::init_DMR(const hamilt::HContainer<TRShift>& DMR_in)
const int iat2 = DMR_in.get_atom_pair(iap).get_atom_j();
for(int ir = 0;ir<DMR_in.get_atom_pair(iap).get_R_size();ir++)
{
const int* R_index = DMR_in.get_atom_pair(iap).get_R_index(ir);
hamilt::AtomPair<TR> tmp_ap(iat1, iat2, R_index[0], R_index[1], R_index[2], paraV_);
const ModuleBase::Vector3<int> R_index = DMR_in.get_atom_pair(iap).get_R_index(ir);
hamilt::AtomPair<TR> tmp_ap(iat1, iat2, R_index, paraV_);
tmp_DMR->insert_pair(tmp_ap);
}
}
Expand Down Expand Up @@ -417,8 +417,8 @@ void DensityMatrix<TK,TR>::cal_DMR_test()
}
for (int ir = 0; ir < tmp_ap.get_R_size(); ++ir)
{
const int* r_index = tmp_ap.get_R_index(ir);
hamilt::BaseMatrix<TR>* tmp_matrix = tmp_ap.find_matrix(r_index[0], r_index[1], r_index[2]);
const ModuleBase::Vector3<int> r_index = tmp_ap.get_R_index(ir);
hamilt::BaseMatrix<TR>* tmp_matrix = tmp_ap.find_matrix(r_index);
#ifdef __DEBUG
if (tmp_matrix == nullptr)
{
Expand Down Expand Up @@ -484,8 +484,8 @@ void DensityMatrix<std::complex<double>, double>::cal_DMR()
}
for (int ir = 0; ir < tmp_ap.get_R_size(); ++ir)
{
const int* r_index = tmp_ap.get_R_index(ir);
hamilt::BaseMatrix<double>* tmp_matrix = tmp_ap.find_matrix(r_index[0], r_index[1], r_index[2]);
const ModuleBase::Vector3<int> r_index = tmp_ap.get_R_index(ir);
hamilt::BaseMatrix<double>* tmp_matrix = tmp_ap.find_matrix(r_index);
#ifdef __DEBUG
if (tmp_matrix == nullptr)
{
Expand Down Expand Up @@ -644,12 +644,12 @@ void DensityMatrix<double, double>::cal_DMR()
throw std::string("Atom-pair not belong this process");
}
// R index
const int* r_index = tmp_ap.get_R_index(0);
const ModuleBase::Vector3<int> r_index = tmp_ap.get_R_index(0);
#ifdef __DEBUG
assert(tmp_ap.get_R_size() == 1);
assert(r_index[0] == 0 && r_index[1] == 0 && r_index[2] == 0);
assert(r_index.x == 0 && r_index.y == 0 && r_index.z == 0);
#endif
hamilt::BaseMatrix<double>* tmp_matrix = tmp_ap.find_matrix(r_index[0], r_index[1], r_index[2]);
hamilt::BaseMatrix<double>* tmp_matrix = tmp_ap.find_matrix(r_index);
#ifdef __DEBUG
if (tmp_matrix == nullptr)
{
Expand Down Expand Up @@ -695,9 +695,9 @@ void DensityMatrix<TK, TR>::sum_DMR_spin()
hamilt::AtomPair<TR>& tmp_ap_down = tmp_DMR_down->get_atom_pair(i);
for (int ir = 0; ir < tmp_ap_up.get_R_size(); ++ir)
{
const int* r_index = tmp_ap_up.get_R_index(ir);
hamilt::BaseMatrix<double>* tmp_matrix_up = tmp_ap_up.find_matrix(r_index[0], r_index[1], r_index[2]);
hamilt::BaseMatrix<double>* tmp_matrix_down = tmp_ap_down.find_matrix(r_index[0], r_index[1], r_index[2]);
const ModuleBase::Vector3<int> r_index = tmp_ap_up.get_R_index(ir);
hamilt::BaseMatrix<double>* tmp_matrix_up = tmp_ap_up.find_matrix(r_index);
hamilt::BaseMatrix<double>* tmp_matrix_down = tmp_ap_down.find_matrix(r_index);
TR* ptr_up = tmp_matrix_up->get_pointer();
TR* ptr_down = tmp_matrix_down->get_pointer();
for (int i = 0; i < tmp_ap_up.get_size(); ++i)
Expand Down
8 changes: 4 additions & 4 deletions source/module_esolver/io_npz.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -448,9 +448,9 @@ void ESolver_KS_LCAO<TK, TR>::output_mat_npz(std::string& zipname, const hamilt:
for(int iR=0;iR<HR_serial[0].get_atom_pair(iap).get_R_size();++iR)
{
auto& matrix = HR_serial[0].get_atom_pair(iap).get_HR_values(iR);
int* r_index = HR_serial[0].get_atom_pair(iap).get_R_index(iR);
const ModuleBase::Vector3<int> r_index = HR_serial[0].get_atom_pair(iap).get_R_index(iR);
filename = "mat_"+std::to_string(atom_i)+"_"+std::to_string(atom_j)+"_"
+std::to_string(r_index[0])+"_"+std::to_string(r_index[1])+"_"+std::to_string(r_index[2]);
+std::to_string(r_index.x)+"_"+std::to_string(r_index.y)+"_"+std::to_string(r_index.z);
std::vector<size_t> shape = {(size_t)row_size,(size_t)col_size};
cnpy::npz_save(zipname,filename,matrix.get_pointer(),shape,"a");
}
Expand All @@ -472,10 +472,10 @@ void ESolver_KS_LCAO<TK, TR>::output_mat_npz(std::string& zipname, const hamilt:
for(int iR=0;iR<hR.get_atom_pair(iap).get_R_size();++iR)
{
auto& matrix = hR.get_atom_pair(iap).get_HR_values(iR);
int* r_index = hR.get_atom_pair(iap).get_R_index(iR);
const ModuleBase::Vector3<int> r_index = hR.get_atom_pair(iap).get_R_index(iR);

filename = "mat_"+std::to_string(atom_i)+"_"+std::to_string(atom_j)+"_"
+std::to_string(r_index[0])+"_"+std::to_string(r_index[1])+"_"+std::to_string(r_index[2]);
+std::to_string(r_index.x)+"_"+std::to_string(r_index.y)+"_"+std::to_string(r_index.z);
std::vector<size_t> shape = {(size_t)row_size,(size_t)col_size};
cnpy::npz_save(zipname,filename,matrix.get_pointer(),shape,"a");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ void hamilt::EkineticNew<hamilt::OperatorLCAO<TK, TR>>::initialize_HR(Grid_Drive
const int I2 = adjs.natom[ad];
int iat2 = ucell->itia2iat(T2, I2);
ModuleBase::Vector3<int>& R_index = adjs.box[ad];
hamilt::AtomPair<TR> tmp(iat1, iat2, R_index.x, R_index.y, R_index.z, paraV);
hamilt::AtomPair<TR> tmp(iat1, iat2, R_index, paraV);
this->hR->insert_pair(tmp);
}
}
Expand Down Expand Up @@ -122,7 +122,7 @@ void hamilt::EkineticNew<hamilt::OperatorLCAO<TK, TR>>::calculate_HR()
const ModuleBase::Vector3<int>& R_index2 = adjs.box[ad];
ModuleBase::Vector3<double> dtau = this->ucell->cal_dtau(iat1, iat2, R_index2);

hamilt::BaseMatrix<TR>* tmp = this->HR_fixed->find_matrix(iat1, iat2, R_index2.x, R_index2.y, R_index2.z);
hamilt::BaseMatrix<TR>* tmp = this->HR_fixed->find_matrix(iat1, iat2, R_index2);
if (tmp != nullptr)
{
this->cal_HR_IJR(iat1, iat2, paraV, dtau, tmp->get_pointer());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ void hamilt::OverlapNew<hamilt::OperatorLCAO<TK, TR>>::initialize_SR(Grid_Driver
{
continue;
}
hamilt::AtomPair<TR> tmp(iat1, iat2, R_index.x, R_index.y, R_index.z, paraV);
hamilt::AtomPair<TR> tmp(iat1, iat2, R_index, paraV);
SR->insert_pair(tmp);
}
}
Expand All @@ -92,9 +92,8 @@ void hamilt::OverlapNew<hamilt::OperatorLCAO<TK, TR>>::calculate_SR()

for (int iR = 0; iR < tmp.get_R_size(); ++iR)
{
const int* R_index = tmp.get_R_index(iR);
ModuleBase::Vector3<int> R_vector(R_index[0], R_index[1], R_index[2]);
auto dtau = ucell->cal_dtau(iat1, iat2, R_vector);
const ModuleBase::Vector3<int> R_index = tmp.get_R_index(iR);
auto dtau = ucell->cal_dtau(iat1, iat2, R_index);
TR* data_pointer = tmp.get_pointer(iR);
this->cal_SR_IJR(iat1, iat2, paraV, dtau, data_pointer);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ void TDEkinetic<OperatorLCAO<TK, TR>>::calculate_HR()
const ModuleBase::Vector3<int>& R_index2 = adjs.box[ad];
ModuleBase::Vector3<double> dtau = this->ucell->cal_dtau(iat1, iat2, R_index2);

hamilt::BaseMatrix<std::complex<double>>* tmp = this->hR_tmp->find_matrix(iat1, iat2, R_index2.x, R_index2.y, R_index2.z);
hamilt::BaseMatrix<TR>* tmp1 = this->SR->find_matrix(iat1, iat2, R_index2.x, R_index2.y, R_index2.z);
hamilt::BaseMatrix<std::complex<double>>* tmp = this->hR_tmp->find_matrix(iat1, iat2, R_index2);
hamilt::BaseMatrix<TR>* tmp1 = this->SR->find_matrix(iat1, iat2, R_index2);
if (tmp != nullptr)
{
this->cal_HR_IJR(iat1, iat2, paraV, dtau, tmp->get_pointer(),tmp1->get_pointer());
Expand Down Expand Up @@ -309,11 +309,11 @@ void TDEkinetic<OperatorLCAO<TK, TR>>::initialize_HR_tmp(const Parallel_Orbitals
hamilt::AtomPair<TR>& tmp = this->hR->get_atom_pair(i);
for(int ir = 0;ir < tmp.get_R_size(); ++ir )
{
const int* R_index = tmp.get_R_index(ir);
const ModuleBase::Vector3<int> R_index = tmp.get_R_index(ir);
const int iat1 = tmp.get_atom_i();
const int iat2 = tmp.get_atom_j();

hamilt::AtomPair<std::complex<double>> tmp1(iat1, iat2, R_index[0], R_index[1], R_index[2], paraV);
hamilt::AtomPair<std::complex<double>> tmp1(iat1, iat2, R_index, paraV);
this->hR_tmp->insert_pair(tmp1);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,11 +113,11 @@ void hamilt::TDNonlocal<hamilt::OperatorLCAO<TK, TR>>::initialize_HR_tmp(const P
hamilt::AtomPair<TR>& tmp = this->hR->get_atom_pair(i);
for(int ir = 0;ir < tmp.get_R_size(); ++ir )
{
const int* R_index = tmp.get_R_index(ir);
const ModuleBase::Vector3<int> R_index = tmp.get_R_index(ir);
const int iat1 = tmp.get_atom_i();
const int iat2 = tmp.get_atom_j();

hamilt::AtomPair<std::complex<double>> tmp1(iat1, iat2, R_index[0], R_index[1], R_index[2], paraV);
hamilt::AtomPair<std::complex<double>> tmp1(iat1, iat2, R_index, paraV);
this->hR_tmp->insert_pair(tmp1);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ void Veff<OperatorLCAO<TK, TR>>::initialize_HR(const UnitCell* ucell_in,
if (ucell_in->cal_dtau(iat1, iat2, R_index2).norm() * ucell_in->lat0
< orb.Phi[T1].getRcut() + orb.Phi[T2].getRcut())
{
hamilt::AtomPair<TR> tmp(iat1, iat2, R_index2.x, R_index2.y, R_index2.z, paraV);
hamilt::AtomPair<TR> tmp(iat1, iat2, R_index2, paraV);
this->hR->insert_pair(tmp);
}
}
Expand Down
12 changes: 6 additions & 6 deletions source/module_hamilt_lcao/hamilt_lcaodft/spar_hsr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,8 +150,8 @@ void sparse_format::cal_HContainer_d(
for(int iR=0;iR<hR.get_atom_pair(iap).get_R_size();++iR)
{
auto& matrix = hR.get_atom_pair(iap).get_HR_values(iR);
int* r_index = hR.get_atom_pair(iap).get_R_index(iR);
Abfs::Vector3_Order<int> dR(r_index[0], r_index[1], r_index[2]);
const ModuleBase::Vector3<int> r_index = hR.get_atom_pair(iap).get_R_index(iR);
Abfs::Vector3_Order<int> dR(r_index.x, r_index.y, r_index.z);
for(int i=0;i<row_size;++i)
{
int mu = row_indexes[start_i+i];
Expand Down Expand Up @@ -194,8 +194,8 @@ void sparse_format::cal_HContainer_cd(
for(int iR=0;iR<hR.get_atom_pair(iap).get_R_size();++iR)
{
auto& matrix = hR.get_atom_pair(iap).get_HR_values(iR);
int* r_index = hR.get_atom_pair(iap).get_R_index(iR);
Abfs::Vector3_Order<int> dR(r_index[0], r_index[1], r_index[2]);
const ModuleBase::Vector3<int> r_index = hR.get_atom_pair(iap).get_R_index(iR);
Abfs::Vector3_Order<int> dR(r_index.x, r_index.y, r_index.z);
for(int i=0;i<row_size;++i)
{
int mu = row_indexes[start_i+i];
Expand Down Expand Up @@ -238,8 +238,8 @@ void sparse_format::cal_HContainer_td(
for(int iR=0;iR<hR.get_atom_pair(iap).get_R_size();++iR)
{
auto& matrix = hR.get_atom_pair(iap).get_HR_values(iR);
int* r_index = hR.get_atom_pair(iap).get_R_index(iR);
Abfs::Vector3_Order<int> dR(r_index[0], r_index[1], r_index[2]);
const ModuleBase::Vector3<int> r_index = hR.get_atom_pair(iap).get_R_index(iR);
Abfs::Vector3_Order<int> dR(r_index.x, r_index.y, r_index.z);
for(int i=0;i<row_size;++i)
{
int mu = row_indexes[start_i+i];
Expand Down
4 changes: 2 additions & 2 deletions source/module_hamilt_lcao/module_gint/gint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -715,10 +715,10 @@ void Gint::transfer_DM2DtoGrid(std::vector<hamilt::HContainer<double>*> DM2D)
int iat2 = ap.get_atom_j();
for(int ir = 0;ir<ap.get_R_size();++ir)
{
int* r_index = ap.get_R_index(ir);
const ModuleBase::Vector3<int> r_index = ap.get_R_index(ir);
for (int is = 0; is < 4; is++)
{
tmp_pointer[is] = this->DMRGint[is]->find_matrix(iat1, iat2, r_index[0], r_index[1], r_index[2])->get_pointer();
tmp_pointer[is] = this->DMRGint[is]->find_matrix(iat1, iat2, r_index)->get_pointer();
}
double* data_full = ap.get_pointer(ir);
for(int irow=0;irow<ap.get_row_size();irow += 2)
Expand Down
8 changes: 4 additions & 4 deletions source/module_hamilt_lcao/module_gint/gint_k_pvpr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,7 @@ void Gint_k::transfer_pvpR(hamilt::HContainer<double> *hR,const UnitCell* ucell_

int ixxx = DM_start + this->gridt->find_R2st[iat][nad];

hamilt::BaseMatrix<double>* tmp_matrix = this->hRGint->find_matrix(iat, iat2, dR.x, dR.y, dR.z);
hamilt::BaseMatrix<double>* tmp_matrix = this->hRGint->find_matrix(iat, iat2, dR);
#ifdef __DEBUG
assert(tmp_matrix != nullptr);
#endif
Expand All @@ -508,7 +508,7 @@ void Gint_k::transfer_pvpR(hamilt::HContainer<double> *hR,const UnitCell* ucell_
// save the lower triangle.
if(iat < iat2)//skip iat == iat2
{
hamilt::BaseMatrix<double>* conj_matrix = this->hRGint->find_matrix(iat2, iat, -dR.x, -dR.y, -dR.z);
hamilt::BaseMatrix<double>* conj_matrix = this->hRGint->find_matrix(iat2, iat, -dR);
#ifdef __DEBUG
assert(conj_matrix != nullptr);
#endif
Expand Down Expand Up @@ -617,7 +617,7 @@ void Gint_k::transfer_pvpR(hamilt::HContainer<std::complex<double>> *hR,const Un

int ixxx = DM_start + this->gridt->find_R2st[iat][nad];

hamilt::BaseMatrix<std::complex<double>>* tmp_matrix = this->hRGintCd->find_matrix(iat, iat2, dR.x, dR.y, dR.z);
hamilt::BaseMatrix<std::complex<double>>* tmp_matrix = this->hRGintCd->find_matrix(iat, iat2, dR);
#ifdef __DEBUG
assert(tmp_matrix != nullptr);
#endif
Expand Down Expand Up @@ -666,7 +666,7 @@ void Gint_k::transfer_pvpR(hamilt::HContainer<std::complex<double>> *hR,const Un
// save the lower triangle.
if(iat < iat2)
{
hamilt::BaseMatrix<std::complex<double>>* conj_matrix = this->hRGintCd->find_matrix(iat2, iat, -dR.x, -dR.y, -dR.z);
hamilt::BaseMatrix<std::complex<double>>* conj_matrix = this->hRGintCd->find_matrix(iat2, iat, -dR);
#ifdef __DEBUG
assert(conj_matrix != nullptr);
#endif
Expand Down
Loading

0 comments on commit 156dac2

Please sign in to comment.