diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_hamilt.hpp b/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_hamilt.hpp index 162bae73859..8edfb5be657 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_hamilt.hpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_hamilt.hpp @@ -13,8 +13,11 @@ #include "module_base/timer.h" #include +#include +#include #include +#include #include #include @@ -31,6 +34,18 @@ void LCAO_Hamilt::calculate_HR_exx_sparse( const Tdata frac = GlobalC::exx_info.info_global.hybrid_alpha; + std::map> atoms_pos; + for(int iat=0; iat,3> latvec + = {RI_Util::Vector3_to_array3(GlobalC::ucell.a1), + RI_Util::Vector3_to_array3(GlobalC::ucell.a2), + RI_Util::Vector3_to_array3(GlobalC::ucell.a3)}; + const std::array Rs_period = {nmp[0], nmp[1], nmp[2]}; + + RI::Cell_Nearest cell_nearest; + cell_nearest.init(atoms_pos, latvec, Rs_period); + const std::vector is_list = (GlobalV::NSPIN!=4) ? std::vector{current_spin} : std::vector{0,1,2,3}; for(const int is : is_list) { @@ -42,7 +57,9 @@ void LCAO_Hamilt::calculate_HR_exx_sparse( for(const auto &HexxB : HexxA.second) { const int iat1 = HexxB.first.first; - const Abfs::Vector3_Order R = ModuleBase::Vector3(HexxB.first.second); + const Abfs::Vector3_Order R = RI_Util::array3_to_Vector3( + cell_nearest.get_cell_nearest_discrete(iat0, iat1, HexxB.first.second)); + this->LM->all_R_coor.insert(R); const RI::Tensor &Hexx = HexxB.second; for(size_t iw0=0; iw0 Rs_period(nmp[0], nmp[1], nmp[2]); - for(int Rx=0; RxLM->all_R_coor.insert(Abfs::Vector3_Order{Rx,Ry,Rz} % Rs_period); - ModuleBase::timer::tick("LCAO_Hamilt","calculate_HR_exx_sparse"); }