diff --git a/source/module_esolver/esolver_ks_lcaopw.cpp b/source/module_esolver/esolver_ks_lcaopw.cpp index 45bcac2785..e477ffecde 100644 --- a/source/module_esolver/esolver_ks_lcaopw.cpp +++ b/source/module_esolver/esolver_ks_lcaopw.cpp @@ -147,7 +147,7 @@ namespace ModuleESolver } hsolver::HSolverLIP hsolver_lip_obj(this->pw_wfc); - hsolver_lip_obj.solve(this->p_hamilt, this->kspw_psi[0], this->pelec, psig.lock().get()[0], skip_charge); + hsolver_lip_obj.solve(this->p_hamilt, this->kspw_psi[0], this->pelec, psig.lock().get()[0], skip_charge,ucell.tpiba,ucell.nat); // add exx #ifdef __EXX diff --git a/source/module_esolver/esolver_ks_pw.cpp b/source/module_esolver/esolver_ks_pw.cpp index 3834b4e162..b70c53eec0 100644 --- a/source/module_esolver/esolver_ks_pw.cpp +++ b/source/module_esolver/esolver_ks_pw.cpp @@ -447,7 +447,9 @@ void ESolver_KS_PW::hamilt2density_single(UnitCell& ucell, this->pelec->ekb.c, GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL, - skip_charge); + skip_charge, + ucell.tpiba, + ucell.nat); Symmetry_rho srho; for (int is = 0; is < PARAM.inp.nspin; is++) diff --git a/source/module_hsolver/hsolver_lcaopw.cpp b/source/module_hsolver/hsolver_lcaopw.cpp index 6c1169df1a..f87a15664a 100644 --- a/source/module_hsolver/hsolver_lcaopw.cpp +++ b/source/module_hsolver/hsolver_lcaopw.cpp @@ -24,7 +24,7 @@ namespace hsolver #ifdef USE_PAW template -void HSolverLIP::paw_func_in_kloop(const int ik) +void HSolverLIP::paw_func_in_kloop(const int ik,const double tpiba) { if (PARAM.inp.use_paw) { @@ -64,7 +64,7 @@ void HSolverLIP::paw_func_in_kloop(const int ik) this->wfc_basis->get_ig2iy(ik).data(), this->wfc_basis->get_ig2iz(ik).data(), (const double**)kpg, - GlobalC::ucell.tpiba, + tpiba, (const double**)gcar); std::vector().swap(kpt); @@ -83,7 +83,10 @@ void HSolverLIP::paw_func_in_kloop(const int ik) } template -void HSolverLIP::paw_func_after_kloop(psi::Psi& psi, elecstate::ElecState* pes) +void HSolverLIP::paw_func_after_kloop(psi::Psi& psi, + elecstate::ElecState* pes, + const double tpiba, + const int nat) { if (PARAM.inp.use_paw) { @@ -131,7 +134,7 @@ void HSolverLIP::paw_func_after_kloop(psi::Psi& psi, elecstate::ElecState* this->wfc_basis->get_ig2iy(ik).data(), this->wfc_basis->get_ig2iz(ik).data(), (const double**)kpg, - GlobalC::ucell.tpiba, + tpiba, (const double**)gcar); std::vector().swap(kpt); @@ -164,7 +167,7 @@ void HSolverLIP::paw_func_after_kloop(psi::Psi& psi, elecstate::ElecState* { GlobalC::paw_cell.get_rhoijp(rhoijp, rhoijselect, nrhoijsel); - for (int iat = 0; iat < GlobalC::ucell.nat; iat++) + for (int iat = 0; iat < nat; iat++) { GlobalC::paw_cell.set_rhoij(iat, nrhoijsel[iat], @@ -176,7 +179,7 @@ void HSolverLIP::paw_func_after_kloop(psi::Psi& psi, elecstate::ElecState* #else GlobalC::paw_cell.get_rhoijp(rhoijp, rhoijselect, nrhoijsel); - for (int iat = 0; iat < GlobalC::ucell.nat; iat++) + for (int iat = 0; iat < nat; iat++) { GlobalC::paw_cell.set_rhoij(iat, nrhoijsel[iat], @@ -201,7 +204,9 @@ void HSolverLIP::solve(hamilt::Hamilt* pHamilt, // ESolver_KS_PW::p_hamilt psi::Psi& psi, // ESolver_KS_PW::kspw_psi elecstate::ElecState* pes, // ESolver_KS_PW::pes psi::Psi& transform, - const bool skip_charge) + const bool skip_charge, + const double tpiba, + const int nat) { ModuleBase::TITLE("HSolverLIP", "solve"); ModuleBase::timer::tick("HSolverLIP", "solve"); @@ -212,7 +217,7 @@ void HSolverLIP::solve(hamilt::Hamilt* pHamilt, // ESolver_KS_PW::p_hamilt pHamilt->updateHk(ik); #ifdef USE_PAW - this->paw_func_in_kloop(ik); + this->paw_func_in_kloop(ik,tpiba); #endif psi.fix_k(ik); @@ -282,7 +287,7 @@ void HSolverLIP::solve(hamilt::Hamilt* pHamilt, // ESolver_KS_PW::p_hamilt reinterpret_cast*>(pes)->psiToRho(psi); #ifdef USE_PAW - this->paw_func_after_kloop(psi, pes); + this->paw_func_after_kloop(psi, pes,tpiba,nat); #endif ModuleBase::timer::tick("HSolverLIP", "solve"); diff --git a/source/module_hsolver/hsolver_lcaopw.h b/source/module_hsolver/hsolver_lcaopw.h index db65e966bc..a4192b8f33 100644 --- a/source/module_hsolver/hsolver_lcaopw.h +++ b/source/module_hsolver/hsolver_lcaopw.h @@ -31,15 +31,21 @@ class HSolverLIP psi::Psi& psi, elecstate::ElecState* pes, psi::Psi& transform, - const bool skip_charge); + const bool skip_charge, + const double tpiba, + const int nat); private: ModulePW::PW_Basis_K* wfc_basis; #ifdef USE_PAW - void paw_func_in_kloop(const int ik); + void paw_func_in_kloop(const int ik, + const double tpiba); - void paw_func_after_kloop(psi::Psi& psi, elecstate::ElecState* pes); + void paw_func_after_kloop(psi::Psi& psi, + elecstate::ElecState* pes, + const double tpiba, + const int nat); #endif }; diff --git a/source/module_hsolver/hsolver_pw.cpp b/source/module_hsolver/hsolver_pw.cpp index 4572495ccd..434fefe073 100644 --- a/source/module_hsolver/hsolver_pw.cpp +++ b/source/module_hsolver/hsolver_pw.cpp @@ -28,7 +28,8 @@ namespace hsolver #ifdef USE_PAW template -void HSolverPW::paw_func_in_kloop(const int ik) +void HSolverPW::paw_func_in_kloop(const int ik, + const double tpiba) { if (this->use_paw) { @@ -68,7 +69,7 @@ void HSolverPW::paw_func_in_kloop(const int ik) this->wfc_basis->get_ig2iy(ik).data(), this->wfc_basis->get_ig2iz(ik).data(), (const double**)kpg, - GlobalC::ucell.tpiba, + tpiba, (const double**)gcar); std::vector().swap(kpt); @@ -96,7 +97,10 @@ void HSolverPW::call_paw_cell_set_currentk(const int ik) } template -void HSolverPW::paw_func_after_kloop(psi::Psi& psi, elecstate::ElecState* pes) +void HSolverPW::paw_func_after_kloop(psi::Psi& psi, + elecstate::ElecState* pes, + const double tpiba, + const int nat) { if (this->use_paw) { @@ -144,7 +148,7 @@ void HSolverPW::paw_func_after_kloop(psi::Psi& psi, elecst this->wfc_basis->get_ig2iy(ik).data(), this->wfc_basis->get_ig2iz(ik).data(), (const double**)kpg, - GlobalC::ucell.tpiba, + tpiba, (const double**)gcar); std::vector().swap(kpt); @@ -177,7 +181,7 @@ void HSolverPW::paw_func_after_kloop(psi::Psi& psi, elecst { GlobalC::paw_cell.get_rhoijp(rhoijp, rhoijselect, nrhoijsel); - for (int iat = 0; iat < GlobalC::ucell.nat; iat++) + for (int iat = 0; iat < nat; iat++) { GlobalC::paw_cell.set_rhoij(iat, nrhoijsel[iat], @@ -189,7 +193,7 @@ void HSolverPW::paw_func_after_kloop(psi::Psi& psi, elecst #else GlobalC::paw_cell.get_rhoijp(rhoijp, rhoijselect, nrhoijsel); - for (int iat = 0; iat < GlobalC::ucell.nat; iat++) + for (int iat = 0; iat < nat; iat++) { GlobalC::paw_cell.set_rhoij(iat, nrhoijsel[iat], @@ -255,7 +259,9 @@ void HSolverPW::solve(hamilt::Hamilt* pHamilt, double* out_eigenvalues, const int rank_in_pool_in, const int nproc_in_pool_in, - const bool skip_charge) + const bool skip_charge, + const double tpiba, + const int nat) { ModuleBase::TITLE("HSolverPW", "solve"); ModuleBase::timer::tick("HSolverPW", "solve"); @@ -282,7 +288,7 @@ void HSolverPW::solve(hamilt::Hamilt* pHamilt, pHamilt->updateHk(ik); #ifdef USE_PAW - this->paw_func_in_kloop(ik); + this->paw_func_in_kloop(ik,tpiba); #endif /// update psi pointer for each k point @@ -341,7 +347,7 @@ void HSolverPW::solve(hamilt::Hamilt* pHamilt, reinterpret_cast*>(pes)->psiToRho(psi); #ifdef USE_PAW - this->paw_func_after_kloop(psi, pes); + this->paw_func_after_kloop(psi, pes,tpiba,nat); #endif ModuleBase::timer::tick("HSolverPW", "solve"); diff --git a/source/module_hsolver/hsolver_pw.h b/source/module_hsolver/hsolver_pw.h index cbfa2b85d6..8165a78a43 100644 --- a/source/module_hsolver/hsolver_pw.h +++ b/source/module_hsolver/hsolver_pw.h @@ -47,7 +47,9 @@ class HSolverPW double* out_eigenvalues, const int rank_in_pool_in, const int nproc_in_pool_in, - const bool skip_charge); + const bool skip_charge, + const double tpiba, + const int nat); protected: // diago caller @@ -89,11 +91,12 @@ class HSolverPW std::vector ethr_band; #ifdef USE_PAW - void paw_func_in_kloop(const int ik); + void paw_func_in_kloop(const int ik, + const double tpiba); void call_paw_cell_set_currentk(const int ik); - void paw_func_after_kloop(psi::Psi& psi, elecstate::ElecState* pes); + void paw_func_after_kloop(psi::Psi& psi, elecstate::ElecState* pes,const double tpiba,const int nat); #endif }; diff --git a/source/module_hsolver/test/test_hsolver_pw.cpp b/source/module_hsolver/test/test_hsolver_pw.cpp index 8c5da0d1c5..5763f1b7d8 100644 --- a/source/module_hsolver/test/test_hsolver_pw.cpp +++ b/source/module_hsolver/test/test_hsolver_pw.cpp @@ -249,8 +249,7 @@ TEST_F(TestHSolverPW, SolveLcaoInPW) { = hsolver::HSolverLIP>(&pwbk); hsolver::HSolverLIP> hs_d_lip = hsolver::HSolverLIP>(&pwbk); - hs_f_lip.solve(&hamilt_test_f, psi_test_cf, &elecstate_test, - transform_test_cf, true); + hs_f_lip.solve(&hamilt_test_f, psi_test_cf, &elecstate_test,transform_test_cf, true,0.0,0); EXPECT_DOUBLE_EQ(hsolver::DiagoIterAssist>::avg_iter, 0.0); for (int i = 0; i < psi_test_cf.size(); i++) { @@ -261,7 +260,7 @@ TEST_F(TestHSolverPW, SolveLcaoInPW) { elecstate_test.ekb.c[0] = 1.0; elecstate_test.ekb.c[1] = 2.0; - hs_d_lip.solve(&hamilt_test_d, psi_test_cd, &elecstate_test, transform_test_cd, true); + hs_d_lip.solve(&hamilt_test_d, psi_test_cd, &elecstate_test, transform_test_cd, true,0.0,0); EXPECT_DOUBLE_EQ(hsolver::DiagoIterAssist>::avg_iter, 0.0); for (int i = 0; i < psi_test_cd.size(); i++) {