From 51ba9215364382a4f2722050883e25dde160b63e Mon Sep 17 00:00:00 2001 From: A-006 <3158793232@qq.com> Date: Sun, 1 Dec 2024 20:07:34 +0800 Subject: [PATCH 1/5] change ucell in the hsolver_pw --- source/module_esolver/esolver_ks_lcaopw.cpp | 2 +- source/module_esolver/esolver_ks_pw.cpp | 1 + source/module_hsolver/hsolver_lcaopw.cpp | 9 +++++---- source/module_hsolver/hsolver_lcaopw.h | 5 +++-- source/module_hsolver/hsolver_pw.cpp | 18 ++++++++++-------- source/module_hsolver/hsolver_pw.h | 6 ++++-- 6 files changed, 24 insertions(+), 17 deletions(-) diff --git a/source/module_esolver/esolver_ks_lcaopw.cpp b/source/module_esolver/esolver_ks_lcaopw.cpp index 45bcac2785..13aa0d0d0a 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, ucell, psig.lock().get()[0], skip_charge); // add exx #ifdef __EXX diff --git a/source/module_esolver/esolver_ks_pw.cpp b/source/module_esolver/esolver_ks_pw.cpp index 3834b4e162..21e24ef929 100644 --- a/source/module_esolver/esolver_ks_pw.cpp +++ b/source/module_esolver/esolver_ks_pw.cpp @@ -444,6 +444,7 @@ void ESolver_KS_PW::hamilt2density_single(UnitCell& ucell, hsolver_pw_obj.solve(this->p_hamilt, this->kspw_psi[0], this->pelec, + ucell, this->pelec->ekb.c, GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL, diff --git a/source/module_hsolver/hsolver_lcaopw.cpp b/source/module_hsolver/hsolver_lcaopw.cpp index 6c1169df1a..2cbb8c2f5f 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 UnitCell& ucell, const int ik) { if (PARAM.inp.use_paw) { @@ -83,7 +83,7 @@ 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(const UnitCell& ucell, psi::Psi& psi, elecstate::ElecState* pes) { if (PARAM.inp.use_paw) { @@ -200,6 +200,7 @@ template 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 + const UnitCell& ucell, psi::Psi& transform, const bool skip_charge) { @@ -212,7 +213,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(ucell,ik); #endif psi.fix_k(ik); @@ -282,7 +283,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(ucell,psi, pes); #endif ModuleBase::timer::tick("HSolverLIP", "solve"); diff --git a/source/module_hsolver/hsolver_lcaopw.h b/source/module_hsolver/hsolver_lcaopw.h index db65e966bc..7f4c15f9fc 100644 --- a/source/module_hsolver/hsolver_lcaopw.h +++ b/source/module_hsolver/hsolver_lcaopw.h @@ -30,6 +30,7 @@ class HSolverLIP void solve(hamilt::Hamilt* pHamilt, psi::Psi& psi, elecstate::ElecState* pes, + const UnitCell& ucell, psi::Psi& transform, const bool skip_charge); @@ -37,9 +38,9 @@ class HSolverLIP ModulePW::PW_Basis_K* wfc_basis; #ifdef USE_PAW - void paw_func_in_kloop(const int ik); + void paw_func_in_kloop(const UnitCell& ucell,const int ik); - void paw_func_after_kloop(psi::Psi& psi, elecstate::ElecState* pes); + void paw_func_after_kloop(const UnitCell& ucell, psi::Psi& psi, elecstate::ElecState* pes); #endif }; diff --git a/source/module_hsolver/hsolver_pw.cpp b/source/module_hsolver/hsolver_pw.cpp index 4572495ccd..4c1a4f8826 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 UnitCell& ucell, + const int ik) { 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, + ucell.tpiba, (const double**)gcar); std::vector().swap(kpt); @@ -96,7 +97,7 @@ 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(const UnitCell& ucell, psi::Psi& psi, elecstate::ElecState* pes) { if (this->use_paw) { @@ -144,7 +145,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, + ucell.tpiba, (const double**)gcar); std::vector().swap(kpt); @@ -177,7 +178,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 < ucell.nat; iat++) { GlobalC::paw_cell.set_rhoij(iat, nrhoijsel[iat], @@ -189,7 +190,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 < ucell.nat; iat++) { GlobalC::paw_cell.set_rhoij(iat, nrhoijsel[iat], @@ -252,6 +253,7 @@ template void HSolverPW::solve(hamilt::Hamilt* pHamilt, psi::Psi& psi, elecstate::ElecState* pes, + const UnitCell& ucell, double* out_eigenvalues, const int rank_in_pool_in, const int nproc_in_pool_in, @@ -282,7 +284,7 @@ void HSolverPW::solve(hamilt::Hamilt* pHamilt, pHamilt->updateHk(ik); #ifdef USE_PAW - this->paw_func_in_kloop(ik); + this->paw_func_in_kloop(ucell,ik); #endif /// update psi pointer for each k point @@ -341,7 +343,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(ucell,psi, pes); #endif ModuleBase::timer::tick("HSolverPW", "solve"); diff --git a/source/module_hsolver/hsolver_pw.h b/source/module_hsolver/hsolver_pw.h index cbfa2b85d6..c868cbb72e 100644 --- a/source/module_hsolver/hsolver_pw.h +++ b/source/module_hsolver/hsolver_pw.h @@ -39,11 +39,13 @@ class HSolverPW /// @param pHamilt interface to hamilt /// @param psi reference to psi /// @param pes interface to elecstate + /// @param ucell reference to unitcell /// @param method_in dav or cg /// @param skip_charge void solve(hamilt::Hamilt* pHamilt, psi::Psi& psi, elecstate::ElecState* pes, + const UnitCell& ucell, double* out_eigenvalues, const int rank_in_pool_in, const int nproc_in_pool_in, @@ -89,11 +91,11 @@ class HSolverPW std::vector ethr_band; #ifdef USE_PAW - void paw_func_in_kloop(const int ik); + void paw_func_in_kloop(const UnitCell& ucell, const int ik); 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(const UnitCell& ucell, psi::Psi& psi, elecstate::ElecState* pes); #endif }; From a815fdcd8220b9a89a445fe40e2742917b573f37 Mon Sep 17 00:00:00 2001 From: A-006 <3158793232@qq.com> Date: Sun, 1 Dec 2024 20:19:55 +0800 Subject: [PATCH 2/5] change test hsolver_pw --- source/module_hsolver/hsolver_lcaopw.cpp | 8 +++---- .../module_hsolver/test/test_hsolver_pw.cpp | 22 ++++++++++++++++--- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/source/module_hsolver/hsolver_lcaopw.cpp b/source/module_hsolver/hsolver_lcaopw.cpp index 2cbb8c2f5f..abb26ef386 100644 --- a/source/module_hsolver/hsolver_lcaopw.cpp +++ b/source/module_hsolver/hsolver_lcaopw.cpp @@ -64,7 +64,7 @@ void HSolverLIP::paw_func_in_kloop(const UnitCell& ucell, const int ik) this->wfc_basis->get_ig2iy(ik).data(), this->wfc_basis->get_ig2iz(ik).data(), (const double**)kpg, - GlobalC::ucell.tpiba, + ucell.tpiba, (const double**)gcar); std::vector().swap(kpt); @@ -131,7 +131,7 @@ void HSolverLIP::paw_func_after_kloop(const UnitCell& ucell, psi::Psi& psi this->wfc_basis->get_ig2iy(ik).data(), this->wfc_basis->get_ig2iz(ik).data(), (const double**)kpg, - GlobalC::ucell.tpiba, + ucell.tpiba, (const double**)gcar); std::vector().swap(kpt); @@ -164,7 +164,7 @@ void HSolverLIP::paw_func_after_kloop(const UnitCell& ucell, psi::Psi& psi { GlobalC::paw_cell.get_rhoijp(rhoijp, rhoijselect, nrhoijsel); - for (int iat = 0; iat < GlobalC::ucell.nat; iat++) + for (int iat = 0; iat < ucell.nat; iat++) { GlobalC::paw_cell.set_rhoij(iat, nrhoijsel[iat], @@ -176,7 +176,7 @@ void HSolverLIP::paw_func_after_kloop(const UnitCell& ucell, psi::Psi& psi #else GlobalC::paw_cell.get_rhoijp(rhoijp, rhoijselect, nrhoijsel); - for (int iat = 0; iat < GlobalC::ucell.nat; iat++) + for (int iat = 0; iat < ucell.nat; iat++) { GlobalC::paw_cell.set_rhoij(iat, nrhoijsel[iat], diff --git a/source/module_hsolver/test/test_hsolver_pw.cpp b/source/module_hsolver/test/test_hsolver_pw.cpp index 8c5da0d1c5..6b273d0dc8 100644 --- a/source/module_hsolver/test/test_hsolver_pw.cpp +++ b/source/module_hsolver/test/test_hsolver_pw.cpp @@ -32,9 +32,16 @@ * - 8. solve() * - lcao_in_pw specific implementation */ +Magnetism::Magnetism(){}; +Magnetism::~Magnetism(){}; +InfoNonlocal::InfoNonlocal(){}; +InfoNonlocal::~InfoNonlocal(){}; +UnitCell::UnitCell(){}; +UnitCell::~UnitCell(){}; class TestHSolverPW : public ::testing::Test { public: ModulePW::PW_Basis_K pwbk; + UnitCell ucell; hsolver::HSolverPW, base_device::DEVICE_CPU> hs_f = hsolver::HSolverPW, base_device::DEVICE_CPU>(&pwbk, "scf", @@ -249,8 +256,12 @@ 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, + ucell, + transform_test_cf, + true); EXPECT_DOUBLE_EQ(hsolver::DiagoIterAssist>::avg_iter, 0.0); for (int i = 0; i < psi_test_cf.size(); i++) { @@ -261,7 +272,12 @@ 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, + ucell, + transform_test_cd, + true); EXPECT_DOUBLE_EQ(hsolver::DiagoIterAssist>::avg_iter, 0.0); for (int i = 0; i < psi_test_cd.size(); i++) { From f5b129b32a6e518124e024e4ffb65b1328ad801e Mon Sep 17 00:00:00 2001 From: A-006 <3158793232@qq.com> Date: Mon, 2 Dec 2024 11:31:06 +0800 Subject: [PATCH 3/5] Revert "change ucell in the hsolver_pw" This reverts commit 51ba9215364382a4f2722050883e25dde160b63e. --- source/module_esolver/esolver_ks_lcaopw.cpp | 2 +- source/module_esolver/esolver_ks_pw.cpp | 1 - source/module_hsolver/hsolver_lcaopw.cpp | 9 ++++----- source/module_hsolver/hsolver_lcaopw.h | 5 ++--- source/module_hsolver/hsolver_pw.cpp | 18 ++++++++---------- source/module_hsolver/hsolver_pw.h | 6 ++---- 6 files changed, 17 insertions(+), 24 deletions(-) diff --git a/source/module_esolver/esolver_ks_lcaopw.cpp b/source/module_esolver/esolver_ks_lcaopw.cpp index 13aa0d0d0a..45bcac2785 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, ucell, 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); // add exx #ifdef __EXX diff --git a/source/module_esolver/esolver_ks_pw.cpp b/source/module_esolver/esolver_ks_pw.cpp index 21e24ef929..3834b4e162 100644 --- a/source/module_esolver/esolver_ks_pw.cpp +++ b/source/module_esolver/esolver_ks_pw.cpp @@ -444,7 +444,6 @@ void ESolver_KS_PW::hamilt2density_single(UnitCell& ucell, hsolver_pw_obj.solve(this->p_hamilt, this->kspw_psi[0], this->pelec, - ucell, this->pelec->ekb.c, GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL, diff --git a/source/module_hsolver/hsolver_lcaopw.cpp b/source/module_hsolver/hsolver_lcaopw.cpp index abb26ef386..0fb589bccd 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 UnitCell& ucell, const int ik) +void HSolverLIP::paw_func_in_kloop(const int ik) { if (PARAM.inp.use_paw) { @@ -83,7 +83,7 @@ void HSolverLIP::paw_func_in_kloop(const UnitCell& ucell, const int ik) } template -void HSolverLIP::paw_func_after_kloop(const UnitCell& ucell, psi::Psi& psi, elecstate::ElecState* pes) +void HSolverLIP::paw_func_after_kloop(psi::Psi& psi, elecstate::ElecState* pes) { if (PARAM.inp.use_paw) { @@ -200,7 +200,6 @@ template 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 - const UnitCell& ucell, psi::Psi& transform, const bool skip_charge) { @@ -213,7 +212,7 @@ void HSolverLIP::solve(hamilt::Hamilt* pHamilt, // ESolver_KS_PW::p_hamilt pHamilt->updateHk(ik); #ifdef USE_PAW - this->paw_func_in_kloop(ucell,ik); + this->paw_func_in_kloop(ik); #endif psi.fix_k(ik); @@ -283,7 +282,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(ucell,psi, pes); + this->paw_func_after_kloop(psi, pes); #endif ModuleBase::timer::tick("HSolverLIP", "solve"); diff --git a/source/module_hsolver/hsolver_lcaopw.h b/source/module_hsolver/hsolver_lcaopw.h index 7f4c15f9fc..db65e966bc 100644 --- a/source/module_hsolver/hsolver_lcaopw.h +++ b/source/module_hsolver/hsolver_lcaopw.h @@ -30,7 +30,6 @@ class HSolverLIP void solve(hamilt::Hamilt* pHamilt, psi::Psi& psi, elecstate::ElecState* pes, - const UnitCell& ucell, psi::Psi& transform, const bool skip_charge); @@ -38,9 +37,9 @@ class HSolverLIP ModulePW::PW_Basis_K* wfc_basis; #ifdef USE_PAW - void paw_func_in_kloop(const UnitCell& ucell,const int ik); + void paw_func_in_kloop(const int ik); - void paw_func_after_kloop(const UnitCell& ucell, psi::Psi& psi, elecstate::ElecState* pes); + void paw_func_after_kloop(psi::Psi& psi, elecstate::ElecState* pes); #endif }; diff --git a/source/module_hsolver/hsolver_pw.cpp b/source/module_hsolver/hsolver_pw.cpp index 4c1a4f8826..4572495ccd 100644 --- a/source/module_hsolver/hsolver_pw.cpp +++ b/source/module_hsolver/hsolver_pw.cpp @@ -28,8 +28,7 @@ namespace hsolver #ifdef USE_PAW template -void HSolverPW::paw_func_in_kloop(const UnitCell& ucell, - const int ik) +void HSolverPW::paw_func_in_kloop(const int ik) { if (this->use_paw) { @@ -69,7 +68,7 @@ void HSolverPW::paw_func_in_kloop(const UnitCell& ucell, this->wfc_basis->get_ig2iy(ik).data(), this->wfc_basis->get_ig2iz(ik).data(), (const double**)kpg, - ucell.tpiba, + GlobalC::ucell.tpiba, (const double**)gcar); std::vector().swap(kpt); @@ -97,7 +96,7 @@ void HSolverPW::call_paw_cell_set_currentk(const int ik) } template -void HSolverPW::paw_func_after_kloop(const UnitCell& ucell, psi::Psi& psi, elecstate::ElecState* pes) +void HSolverPW::paw_func_after_kloop(psi::Psi& psi, elecstate::ElecState* pes) { if (this->use_paw) { @@ -145,7 +144,7 @@ void HSolverPW::paw_func_after_kloop(const UnitCell& ucell, psi::Psi< this->wfc_basis->get_ig2iy(ik).data(), this->wfc_basis->get_ig2iz(ik).data(), (const double**)kpg, - ucell.tpiba, + GlobalC::ucell.tpiba, (const double**)gcar); std::vector().swap(kpt); @@ -178,7 +177,7 @@ void HSolverPW::paw_func_after_kloop(const UnitCell& ucell, psi::Psi< { GlobalC::paw_cell.get_rhoijp(rhoijp, rhoijselect, nrhoijsel); - for (int iat = 0; iat < ucell.nat; iat++) + for (int iat = 0; iat < GlobalC::ucell.nat; iat++) { GlobalC::paw_cell.set_rhoij(iat, nrhoijsel[iat], @@ -190,7 +189,7 @@ void HSolverPW::paw_func_after_kloop(const UnitCell& ucell, psi::Psi< #else GlobalC::paw_cell.get_rhoijp(rhoijp, rhoijselect, nrhoijsel); - for (int iat = 0; iat < ucell.nat; iat++) + for (int iat = 0; iat < GlobalC::ucell.nat; iat++) { GlobalC::paw_cell.set_rhoij(iat, nrhoijsel[iat], @@ -253,7 +252,6 @@ template void HSolverPW::solve(hamilt::Hamilt* pHamilt, psi::Psi& psi, elecstate::ElecState* pes, - const UnitCell& ucell, double* out_eigenvalues, const int rank_in_pool_in, const int nproc_in_pool_in, @@ -284,7 +282,7 @@ void HSolverPW::solve(hamilt::Hamilt* pHamilt, pHamilt->updateHk(ik); #ifdef USE_PAW - this->paw_func_in_kloop(ucell,ik); + this->paw_func_in_kloop(ik); #endif /// update psi pointer for each k point @@ -343,7 +341,7 @@ void HSolverPW::solve(hamilt::Hamilt* pHamilt, reinterpret_cast*>(pes)->psiToRho(psi); #ifdef USE_PAW - this->paw_func_after_kloop(ucell,psi, pes); + this->paw_func_after_kloop(psi, pes); #endif ModuleBase::timer::tick("HSolverPW", "solve"); diff --git a/source/module_hsolver/hsolver_pw.h b/source/module_hsolver/hsolver_pw.h index c868cbb72e..cbfa2b85d6 100644 --- a/source/module_hsolver/hsolver_pw.h +++ b/source/module_hsolver/hsolver_pw.h @@ -39,13 +39,11 @@ class HSolverPW /// @param pHamilt interface to hamilt /// @param psi reference to psi /// @param pes interface to elecstate - /// @param ucell reference to unitcell /// @param method_in dav or cg /// @param skip_charge void solve(hamilt::Hamilt* pHamilt, psi::Psi& psi, elecstate::ElecState* pes, - const UnitCell& ucell, double* out_eigenvalues, const int rank_in_pool_in, const int nproc_in_pool_in, @@ -91,11 +89,11 @@ class HSolverPW std::vector ethr_band; #ifdef USE_PAW - void paw_func_in_kloop(const UnitCell& ucell, const int ik); + void paw_func_in_kloop(const int ik); void call_paw_cell_set_currentk(const int ik); - void paw_func_after_kloop(const UnitCell& ucell, psi::Psi& psi, elecstate::ElecState* pes); + void paw_func_after_kloop(psi::Psi& psi, elecstate::ElecState* pes); #endif }; From 2c243fcd6fbe89d67b5d63a4aa4e0df6fd417ec1 Mon Sep 17 00:00:00 2001 From: A-006 <3158793232@qq.com> Date: Mon, 2 Dec 2024 11:31:47 +0800 Subject: [PATCH 4/5] Revert "change test hsolver_pw" This reverts commit a815fdcd8220b9a89a445fe40e2742917b573f37. --- source/module_hsolver/hsolver_lcaopw.cpp | 8 +++---- .../module_hsolver/test/test_hsolver_pw.cpp | 22 +++---------------- 2 files changed, 7 insertions(+), 23 deletions(-) diff --git a/source/module_hsolver/hsolver_lcaopw.cpp b/source/module_hsolver/hsolver_lcaopw.cpp index 0fb589bccd..6c1169df1a 100644 --- a/source/module_hsolver/hsolver_lcaopw.cpp +++ b/source/module_hsolver/hsolver_lcaopw.cpp @@ -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, - ucell.tpiba, + GlobalC::ucell.tpiba, (const double**)gcar); std::vector().swap(kpt); @@ -131,7 +131,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, - ucell.tpiba, + GlobalC::ucell.tpiba, (const double**)gcar); std::vector().swap(kpt); @@ -164,7 +164,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 < ucell.nat; iat++) + for (int iat = 0; iat < GlobalC::ucell.nat; iat++) { GlobalC::paw_cell.set_rhoij(iat, nrhoijsel[iat], @@ -176,7 +176,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 < ucell.nat; iat++) + for (int iat = 0; iat < GlobalC::ucell.nat; iat++) { GlobalC::paw_cell.set_rhoij(iat, nrhoijsel[iat], diff --git a/source/module_hsolver/test/test_hsolver_pw.cpp b/source/module_hsolver/test/test_hsolver_pw.cpp index 6b273d0dc8..8c5da0d1c5 100644 --- a/source/module_hsolver/test/test_hsolver_pw.cpp +++ b/source/module_hsolver/test/test_hsolver_pw.cpp @@ -32,16 +32,9 @@ * - 8. solve() * - lcao_in_pw specific implementation */ -Magnetism::Magnetism(){}; -Magnetism::~Magnetism(){}; -InfoNonlocal::InfoNonlocal(){}; -InfoNonlocal::~InfoNonlocal(){}; -UnitCell::UnitCell(){}; -UnitCell::~UnitCell(){}; class TestHSolverPW : public ::testing::Test { public: ModulePW::PW_Basis_K pwbk; - UnitCell ucell; hsolver::HSolverPW, base_device::DEVICE_CPU> hs_f = hsolver::HSolverPW, base_device::DEVICE_CPU>(&pwbk, "scf", @@ -256,12 +249,8 @@ 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, - ucell, - transform_test_cf, - true); + hs_f_lip.solve(&hamilt_test_f, psi_test_cf, &elecstate_test, + transform_test_cf, true); EXPECT_DOUBLE_EQ(hsolver::DiagoIterAssist>::avg_iter, 0.0); for (int i = 0; i < psi_test_cf.size(); i++) { @@ -272,12 +261,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, - ucell, - transform_test_cd, - true); + hs_d_lip.solve(&hamilt_test_d, psi_test_cd, &elecstate_test, transform_test_cd, true); EXPECT_DOUBLE_EQ(hsolver::DiagoIterAssist>::avg_iter, 0.0); for (int i = 0; i < psi_test_cd.size(); i++) { From d66ecd6050ba9f13c67c2e96f281ee59f97070a2 Mon Sep 17 00:00:00 2001 From: A-006 <3158793232@qq.com> Date: Mon, 2 Dec 2024 15:06:54 +0800 Subject: [PATCH 5/5] use parameter trans instead of ucell --- source/module_esolver/esolver_ks_lcaopw.cpp | 2 +- source/module_esolver/esolver_ks_pw.cpp | 4 +++- source/module_hsolver/hsolver_lcaopw.cpp | 23 +++++++++++------- source/module_hsolver/hsolver_lcaopw.h | 12 +++++++--- source/module_hsolver/hsolver_pw.cpp | 24 ++++++++++++------- source/module_hsolver/hsolver_pw.h | 9 ++++--- .../module_hsolver/test/test_hsolver_pw.cpp | 5 ++-- 7 files changed, 50 insertions(+), 29 deletions(-) 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++) {