diff --git a/source/module_cell/klist.cpp b/source/module_cell/klist.cpp index 4bae46f38f..7648ee3f5f 100644 --- a/source/module_cell/klist.cpp +++ b/source/module_cell/klist.cpp @@ -13,34 +13,33 @@ #include "module_cell/module_paw/paw_cell.h" #endif -K_Vectors::K_Vectors() +void K_Vectors::cal_ik_global() { - - nspin = 0; // default spin. - kc_done = false; - kd_done = false; - nkstot_full = 0; - nks = 0; - nkstot = 0; - k_nkstot = 0; // LiuXh add 20180619 -} - -K_Vectors::~K_Vectors() -{ -} - -int K_Vectors::get_ik_global(const int& ik, const int& nkstot) -{ - int nkp = nkstot / PARAM.inp.kpar; - int rem = nkstot % PARAM.inp.kpar; - if (GlobalV::MY_POOL < rem) + const int my_pool = this->para_k.my_pool; + this->ik2iktot.resize(this->nks); +#ifdef __MPI + if(this->nspin == 2) { - return GlobalV::MY_POOL * nkp + GlobalV::MY_POOL + ik; + for (int ik = 0; ik < this->nks / 2; ++ik) + { + this->ik2iktot[ik] = this->para_k.startk_pool[my_pool] + ik; + this->ik2iktot[ik + this->nks / 2] = this->nkstot / 2 + this->para_k.startk_pool[my_pool] + ik; + } } else { - return GlobalV::MY_POOL * nkp + rem + ik; + for (int ik = 0; ik < this->nks; ++ik) + { + this->ik2iktot[ik] = this->para_k.startk_pool[my_pool] + ik; + } } +#else + for (int ik = 0; ik < this->nks; ++ik) + { + this->ik2iktot[ik] = ik; + } +#endif + } void K_Vectors::set(const UnitCell& ucell, @@ -162,6 +161,9 @@ void K_Vectors::set(const UnitCell& ucell, // set the k vectors for the up and down spin this->set_kup_and_kdw(); + // get ik2iktot + this->cal_ik_global(); + this->print_klists(ofs); // std::cout << " NUMBER OF K-POINTS : " << nkstot << std::endl; diff --git a/source/module_cell/klist.h b/source/module_cell/klist.h index cc08e336f1..c8dc7dfd84 100644 --- a/source/module_cell/klist.h +++ b/source/module_cell/klist.h @@ -26,8 +26,8 @@ class K_Vectors /// dim: [iks_ibz][(isym, kvec_d)] std::vector>> kstars; - K_Vectors(); - ~K_Vectors(); + K_Vectors(){}; + ~K_Vectors(){}; K_Vectors& operator=(const K_Vectors&) = default; K_Vectors& operator=(K_Vectors&& rhs) = default; @@ -106,23 +106,6 @@ class K_Vectors */ void set_after_vc(const int& nspin, const ModuleBase::Matrix3& reciprocal_vec, const ModuleBase::Matrix3& latvec); - /** - * @brief Gets the global index of a k-point. - * - * This function gets the global index of a k-point based on its local index and the process pool ID. - * The global index is used when the k-points are distributed among multiple process pools. - * - * @param nkstot The total number of k-points. - * @param ik The local index of the k-point. - * - * @return int Returns the global index of the k-point. - * - * @note The function calculates the global index by dividing the total number of k-points (nkstot) by the number of - * process pools (KPAR), and adding the remainder if the process pool ID (MY_POOL) is less than the remainder. - * @note The function is declared as inline for efficiency. - */ - static int get_ik_global(const int& ik, const int& nkstot); - int get_nks() const { return this->nks; @@ -157,19 +140,20 @@ class K_Vectors { this->nkstot_full = value; } + std::vector ik2iktot; ///<[nks] map ik to the global index of k points -private: - int nks; // number of symmetry-reduced k points in this pool(processor, up+dw) - int nkstot; /// number of symmetry-reduced k points in full k mesh - int nkstot_full; /// number of k points before symmetry reduction in full k mesh + private: + int nks = 0; ///< number of symmetry-reduced k points in this pool(processor, up+dw) + int nkstot = 0; ///< number of symmetry-reduced k points in full k mesh + int nkstot_full = 0; ///< number of k points before symmetry reduction in full k mesh - int nspin; - bool kc_done; - bool kd_done; - double koffset[3]={0.0}; // used only in automatic k-points. - std::string k_kword; // LiuXh add 20180619 - int k_nkstot; // LiuXh add 20180619 - bool is_mp = false; // Monkhorst-Pack + int nspin = 0; + bool kc_done = false; + bool kd_done = false; + double koffset[3] = {0.0}; // used only in automatic k-points. + std::string k_kword; // LiuXh add 20180619 + int k_nkstot = 0; // LiuXh add 20180619 + bool is_mp = false; // Monkhorst-Pack /** * @brief Resize the k-point related vectors according to the new k-point number. @@ -288,8 +272,8 @@ class K_Vectors * be recalculated. */ void update_use_ibz(const int& nkstot_ibz, - const std::vector>& kvec_d_ibz, - const std::vector& wk_ibz); + const std::vector>& kvec_d_ibz, + const std::vector& wk_ibz); /** * @brief Sets both the direct and Cartesian k-vectors. @@ -394,5 +378,11 @@ class K_Vectors * @note The function uses the FmtCore::format function to format the output. */ void print_klists(std::ofstream& fn); + + /** + * @brief Gets the global index of a k-point. + * @return this->ik2iktot[ik] + */ + void cal_ik_global(); }; #endif // KVECT_H \ No newline at end of file diff --git a/source/module_cell/parallel_kpoints.h b/source/module_cell/parallel_kpoints.h index 751a44163a..971a2849f2 100644 --- a/source/module_cell/parallel_kpoints.h +++ b/source/module_cell/parallel_kpoints.h @@ -68,14 +68,13 @@ class Parallel_Kpoints return *std::max_element(nks_pool.begin(), nks_pool.end()); } - private: - + public: int kpar = 0; // number of pools int my_pool = 0; // the pool index of the present processor int rank_in_pool = 0; // the rank in the present pool int nproc = 1; // number of processors int nspin = 1; // number of spins - + private: std::vector startpro_pool; // the first processor in each pool #ifdef __MPI void get_nks_pool(const int& nkstot); diff --git a/source/module_elecstate/elecstate_print.cpp b/source/module_elecstate/elecstate_print.cpp index bbdebb7476..fc08baea4e 100644 --- a/source/module_elecstate/elecstate_print.cpp +++ b/source/module_elecstate/elecstate_print.cpp @@ -2,6 +2,7 @@ #include "elecstate_getters.h" #include "module_base/formatter.h" #include "module_base/global_variable.h" +#include "module_base/parallel_common.h" #include "module_elecstate/potentials/H_Hartree_pw.h" #include "module_elecstate/potentials/efield.h" #include "module_elecstate/potentials/gatefield.h" @@ -152,7 +153,9 @@ void print_scf_iterinfo(const std::string& ks_solver, void ElecState::print_eigenvalue(std::ofstream& ofs) { bool wrong = false; - for (int ik = 0; ik < this->klist->get_nks(); ++ik) + const int nks = this->klist->get_nks(); + const int nkstot = this->klist->get_nkstot(); + for (int ik = 0; ik < nks; ++ik) { for (int ib = 0; ib < this->ekb.nc; ++ib) { @@ -164,76 +167,87 @@ void ElecState::print_eigenvalue(std::ofstream& ofs) } } } +#ifdef __MPI + MPI_Allreduce(MPI_IN_PLACE, &wrong, 1, MPI_C_BOOL, MPI_LOR, MPI_COMM_WORLD); +#endif if (wrong) { ModuleBase::WARNING_QUIT("print_eigenvalue", "Eigenvalues are too large!"); } + std::stringstream ss; + if(PARAM.inp.out_alllog) + { + ss << PARAM.globalv.global_out_dir << "running_" << PARAM.inp.calculation << "_" << GlobalV::MY_RANK + 1 << ".log"; + } + else + { + ss << PARAM.globalv.global_out_dir << "running_" << PARAM.inp.calculation << ".log"; + } + std::string filename = ss.str(); + std::vector ngk_tot = this->klist->ngk; - if (GlobalV::MY_RANK != 0) +#ifdef __MPI + if(!PARAM.inp.out_alllog) { - return; + Parallel_Common::bcast_string(filename); } + MPI_Allreduce(MPI_IN_PLACE, ngk_tot.data(), nks, MPI_INT, MPI_SUM, POOL_WORLD); +#endif ModuleBase::TITLE("ESolver_KS_PW", "print_eigenvalue"); ofs << "\n STATE ENERGY(eV) AND OCCUPATIONS "; - for (int ik = 0; ik < this->klist->get_nks(); ik++) + const int nk_fac = PARAM.inp.nspin == 2 ? 2 : 1; + const int nks_np = nks / nk_fac; + const int nkstot_np = nkstot / nk_fac; + ofs << " NSPIN == " << PARAM.inp.nspin << std::endl; + for (int is = 0; is < nk_fac; ++is) { - ofs << std::setprecision(5); - ofs << std::setiosflags(std::ios::showpoint); - if (ik == 0) + if (is == 0 && nk_fac == 2) { - ofs << " NSPIN == " << PARAM.inp.nspin << std::endl; - if (PARAM.inp.nspin == 2) - { - ofs << "SPIN UP : " << std::endl; - } + ofs << "SPIN UP : " << std::endl; } - else if (ik == this->klist->get_nks() / 2) + else if (is == 1 && nk_fac == 2) { - if (PARAM.inp.nspin == 2) - { - ofs << "SPIN DOWN : " << std::endl; - } + ofs << "SPIN DOWN : " << std::endl; } - if (PARAM.inp.nspin == 2) + for (int ip = 0; ip < GlobalV::KPAR; ++ip) { - if (this->klist->isk[ik] == 0) - { - ofs << " " << ik + 1 << "/" << this->klist->get_nks() / 2 - << " kpoint (Cartesian) = " << this->klist->kvec_c[ik].x << " " << this->klist->kvec_c[ik].y << " " - << this->klist->kvec_c[ik].z << " (" << this->klist->ngk[ik] << " pws)" << std::endl; - - ofs << std::setprecision(6); - } - if (this->klist->isk[ik] == 1) +#ifdef __MPI + MPI_Barrier(MPI_COMM_WORLD); +#endif + bool ip_flag = PARAM.inp.out_alllog || (GlobalV::RANK_IN_POOL == 0 && GlobalV::MY_STOGROUP == 0); + if (GlobalV::MY_POOL == ip && ip_flag) { - ofs << " " << ik + 1 - this->klist->get_nks() / 2 << "/" << this->klist->get_nks() / 2 - << " kpoint (Cartesian) = " << this->klist->kvec_c[ik].x << " " << this->klist->kvec_c[ik].y << " " - << this->klist->kvec_c[ik].z << " (" << this->klist->ngk[ik] << " pws)" << std::endl; + const int start_ik = nks_np * is; + const int end_ik = nks_np * (is + 1); + for (int ik = start_ik; ik < end_ik; ++ik) + { + std::ofstream ofs_eig(filename.c_str(), std::ios::app); + ofs_eig << std::setprecision(5); + ofs_eig << std::setiosflags(std::ios::showpoint); + ofs_eig << " " << this->klist->ik2iktot[ik] + 1 - is * nkstot_np << "/" << nkstot_np + << " kpoint (Cartesian) = " << this->klist->kvec_c[ik].x << " " << this->klist->kvec_c[ik].y + << " " << this->klist->kvec_c[ik].z << " (" << ngk_tot[ik] << " pws)" << std::endl; - ofs << std::setprecision(6); + ofs_eig << std::setprecision(6); + ofs_eig << std::setiosflags(std::ios::showpoint); + for (int ib = 0; ib < this->ekb.nc; ib++) + { + ofs_eig << std::setw(8) << ib + 1 << std::setw(15) << this->ekb(ik, ib) * ModuleBase::Ry_to_eV + << std::setw(15) << this->wg(ik, ib) << std::endl; + } + ofs_eig << std::endl; + ofs_eig.close(); + } } - } // Pengfei Li added 14-9-9 - else - { - ofs << " " << ik + 1 << "/" << this->klist->get_nks() - << " kpoint (Cartesian) = " << this->klist->kvec_c[ik].x << " " << this->klist->kvec_c[ik].y << " " - << this->klist->kvec_c[ik].z << " (" << this->klist->ngk[ik] << " pws)" << std::endl; - - ofs << std::setprecision(6); } - - ofs << std::setprecision(6); - ofs << std::setiosflags(std::ios::showpoint); - for (int ib = 0; ib < this->ekb.nc; ib++) - { - ofs << std::setw(8) << ib + 1 << std::setw(15) << this->ekb(ik, ib) * ModuleBase::Ry_to_eV << std::setw(15) - << this->wg(ik, ib) << std::endl; - } - ofs << std::endl; - } // end ik +#ifdef __MPI + MPI_Barrier(MPI_COMM_WORLD); +#endif + ofs.seekp(0, std::ios::end); + } return; } diff --git a/source/module_elecstate/module_charge/charge_init.cpp b/source/module_elecstate/module_charge/charge_init.cpp index 9d104312b7..f6a0b400d4 100644 --- a/source/module_elecstate/module_charge/charge_init.cpp +++ b/source/module_elecstate/module_charge/charge_init.cpp @@ -248,7 +248,7 @@ void Charge::init_rho(elecstate::efermi& eferm_iout, const K_Vectors* kv = reinterpret_cast(klist); const int nkstot = kv->get_nkstot(); const std::vector& isk = kv->isk; - ModuleIO::read_wfc_to_rho(pw_wfc, symm, nkstot, isk, *this); + ModuleIO::read_wfc_to_rho(pw_wfc, symm, kv->ik2iktot.data(), nkstot, isk, *this); } } diff --git a/source/module_elecstate/module_dm/test/test_cal_dm_R.cpp b/source/module_elecstate/module_dm/test/test_cal_dm_R.cpp index 1557b5dde8..7acd2aa6fb 100644 --- a/source/module_elecstate/module_dm/test/test_cal_dm_R.cpp +++ b/source/module_elecstate/module_dm/test/test_cal_dm_R.cpp @@ -6,13 +6,6 @@ #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" #include "module_cell/klist.h" -K_Vectors::K_Vectors() -{ -} - -K_Vectors::~K_Vectors() -{ -} /************************************************ * unit test of DensityMatrix constructor ***********************************************/ diff --git a/source/module_elecstate/module_dm/test/test_dm_R_init.cpp b/source/module_elecstate/module_dm/test/test_dm_R_init.cpp index 181f20266d..bdbce1fa2b 100644 --- a/source/module_elecstate/module_dm/test/test_dm_R_init.cpp +++ b/source/module_elecstate/module_dm/test/test_dm_R_init.cpp @@ -7,13 +7,6 @@ #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" #include "module_cell/klist.h" #undef private -K_Vectors::K_Vectors() -{ -} - -K_Vectors::~K_Vectors() -{ -} /************************************************ * unit test of DensityMatrix constructor ***********************************************/ diff --git a/source/module_elecstate/module_dm/test/test_dm_constructor.cpp b/source/module_elecstate/module_dm/test/test_dm_constructor.cpp index e31483bf84..04d96728bf 100644 --- a/source/module_elecstate/module_dm/test/test_dm_constructor.cpp +++ b/source/module_elecstate/module_dm/test/test_dm_constructor.cpp @@ -5,12 +5,6 @@ #include "module_elecstate/module_dm/density_matrix.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" #include "module_cell/klist.h" -K_Vectors::K_Vectors() -{ -} -K_Vectors::~K_Vectors() -{ -} /************************************************ * unit test of DensityMatrix constructor ***********************************************/ diff --git a/source/module_elecstate/module_dm/test/test_dm_io.cpp b/source/module_elecstate/module_dm/test/test_dm_io.cpp index 56f47e36fe..1d1a5ff199 100644 --- a/source/module_elecstate/module_dm/test/test_dm_io.cpp +++ b/source/module_elecstate/module_dm/test/test_dm_io.cpp @@ -33,15 +33,6 @@ Magnetism::~Magnetism() } #include "module_cell/klist.h" - -K_Vectors::K_Vectors() -{ -} - -K_Vectors::~K_Vectors() -{ -} - #include "module_cell/module_neighbor/sltk_grid_driver.h" // mock find_atom() function void Grid_Driver::Find_atom(const UnitCell& ucell, diff --git a/source/module_elecstate/test/elecstate_base_test.cpp b/source/module_elecstate/test/elecstate_base_test.cpp index 02905c64ed..9e393f7323 100644 --- a/source/module_elecstate/test/elecstate_base_test.cpp +++ b/source/module_elecstate/test/elecstate_base_test.cpp @@ -41,12 +41,6 @@ Magnetism::~Magnetism(){} InfoNonlocal::InfoNonlocal(){} InfoNonlocal::~InfoNonlocal(){} #include "module_cell/klist.h" -K_Vectors::K_Vectors() -{ -} -K_Vectors::~K_Vectors() -{ -} ModulePW::PW_Basis::PW_Basis() { diff --git a/source/module_elecstate/test/elecstate_energy_test.cpp b/source/module_elecstate/test/elecstate_energy_test.cpp index b8078c1962..bc2f5eb4be 100644 --- a/source/module_elecstate/test/elecstate_energy_test.cpp +++ b/source/module_elecstate/test/elecstate_energy_test.cpp @@ -54,12 +54,6 @@ double ElecState::get_local_pp_energy() } // namespace elecstate #include "module_cell/klist.h" -K_Vectors::K_Vectors() -{ -} -K_Vectors::~K_Vectors() -{ -} /*************************************************************** diff --git a/source/module_elecstate/test/elecstate_print_test.cpp b/source/module_elecstate/test/elecstate_print_test.cpp index 0fb0248e64..e05759f6ca 100644 --- a/source/module_elecstate/test/elecstate_print_test.cpp +++ b/source/module_elecstate/test/elecstate_print_test.cpp @@ -11,12 +11,6 @@ #include "module_elecstate/potentials/gatefield.h" #include "module_elecstate/module_charge/charge.h" #include "module_cell/klist.h" -K_Vectors::K_Vectors() -{ -} -K_Vectors::~K_Vectors() -{ -} /*************************************************************** * mock functions @@ -75,11 +69,15 @@ class ElecStatePrintTest : public ::testing::Test { p_klist = new K_Vectors; p_klist->set_nks(2); + p_klist->set_nkstot(2); p_klist->isk = {0, 1}; p_klist->ngk = {100, 101}; p_klist->kvec_c.resize(2); p_klist->kvec_c[0].set(0.1, 0.11, 0.111); p_klist->kvec_c[1].set(0.2, 0.22, 0.222); + p_klist->ik2iktot.resize(2); + p_klist->ik2iktot[0] = 0; + p_klist->ik2iktot[1] = 1; // initialize klist of elecstate elecstate.klist = p_klist; // initialize ekb of elecstate @@ -122,11 +120,11 @@ TEST_F(ElecStatePrintTest, PrintFormat) TEST_F(ElecStatePrintTest, PrintEigenvalueS2) { PARAM.input.nspin = 2; - GlobalV::ofs_running.open("test.dat", std::ios::out); + GlobalV::ofs_running.open("running_scf.log", std::ios::out); // print eigenvalue elecstate.print_eigenvalue(GlobalV::ofs_running); GlobalV::ofs_running.close(); - ifs.open("test.dat", std::ios::in); + ifs.open("running_scf.log", std::ios::in); std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); EXPECT_THAT(str, testing::HasSubstr("STATE ENERGY(eV) AND OCCUPATIONS")); EXPECT_THAT(str, testing::HasSubstr("NSPIN == 2")); @@ -139,17 +137,17 @@ TEST_F(ElecStatePrintTest, PrintEigenvalueS2) EXPECT_THAT(str, testing::HasSubstr("1 40.8171 0.300000")); EXPECT_THAT(str, testing::HasSubstr("2 54.4228 0.400000")); ifs.close(); - std::remove("test.dat"); + std::remove("running_scf.log"); } TEST_F(ElecStatePrintTest, PrintEigenvalueS4) { PARAM.input.nspin = 4; - GlobalV::ofs_running.open("test.dat", std::ios::out); + GlobalV::ofs_running.open("running_scf.log", std::ios::out); // print eigenvalue elecstate.print_eigenvalue(GlobalV::ofs_running); GlobalV::ofs_running.close(); - ifs.open("test.dat", std::ios::in); + ifs.open("running_scf.log", std::ios::in); std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); EXPECT_THAT(str, testing::HasSubstr("STATE ENERGY(eV) AND OCCUPATIONS")); EXPECT_THAT(str, testing::HasSubstr("NSPIN == 4")); @@ -160,7 +158,7 @@ TEST_F(ElecStatePrintTest, PrintEigenvalueS4) EXPECT_THAT(str, testing::HasSubstr("1 40.8171 0.300000")); EXPECT_THAT(str, testing::HasSubstr("2 54.4228 0.400000")); ifs.close(); - std::remove("test.dat"); + std::remove("running_scf.log"); } TEST_F(ElecStatePrintTest, PrintBand) @@ -168,43 +166,43 @@ TEST_F(ElecStatePrintTest, PrintBand) PARAM.input.nspin = 1; PARAM.input.nbands = 2; GlobalV::MY_RANK = 0; - GlobalV::ofs_running.open("test.dat", std::ios::out); + GlobalV::ofs_running.open("running_scf.log", std::ios::out); // print eigenvalue elecstate.print_band(0, 1, 0); GlobalV::ofs_running.close(); - ifs.open("test.dat", std::ios::in); + ifs.open("running_scf.log", std::ios::in); std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); EXPECT_THAT(str, testing::HasSubstr("Energy (eV) & Occupations for spin=1 K-point=1")); EXPECT_THAT(str, testing::HasSubstr("1 13.6057 0.100000")); EXPECT_THAT(str, testing::HasSubstr("2 27.2114 0.200000")); ifs.close(); - std::remove("test.dat"); + std::remove("running_scf.log"); } TEST_F(ElecStatePrintTest, PrintEigenvalueWarning) { elecstate.ekb(0, 0) = 1.0e11; PARAM.input.nspin = 4; - GlobalV::ofs_running.open("test.dat", std::ios::out); + GlobalV::ofs_running.open("running_scf.log", std::ios::out); testing::internal::CaptureStdout(); EXPECT_EXIT(elecstate.print_eigenvalue(GlobalV::ofs_running), ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("Eigenvalues are too large!")); GlobalV::ofs_running.close(); - std::remove("test.dat"); + std::remove("running_scf.log"); } TEST_F(ElecStatePrintTest, PrintBandWarning) { elecstate.ekb(0, 0) = 1.0e11; PARAM.input.nspin = 4; - GlobalV::ofs_running.open("test.dat", std::ios::out); + GlobalV::ofs_running.open("running_scf.log", std::ios::out); testing::internal::CaptureStdout(); EXPECT_EXIT(elecstate.print_band(0, 1, 0), ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("Eigenvalues are too large!")); GlobalV::ofs_running.close(); - std::remove("test.dat"); + std::remove("running_scf.log"); } TEST_F(ElecStatePrintTest, PrintEtot) @@ -348,6 +346,7 @@ TEST_F(ElecStatePrintTest, PrintEtotColorS2) PARAM.input.nspin = 2; GlobalV::MY_RANK = 0; elecstate.print_etot(ucell.magnet,converged, iter, scf_thr, scf_thr_kin, duration, printe, pw_diag_thr, avg_iter, print); + delete elecstate.charge; } TEST_F(ElecStatePrintTest, PrintEtotColorS4) @@ -373,4 +372,5 @@ TEST_F(ElecStatePrintTest, PrintEtotColorS4) PARAM.input.noncolin = true; GlobalV::MY_RANK = 0; elecstate.print_etot(ucell.magnet,converged, iter, scf_thr, scf_thr_kin, duration, printe, pw_diag_thr, avg_iter, print); + delete elecstate.charge; } \ No newline at end of file diff --git a/source/module_elecstate/test/elecstate_pw_test.cpp b/source/module_elecstate/test/elecstate_pw_test.cpp index 1ab7273721..a2a3533ade 100644 --- a/source/module_elecstate/test/elecstate_pw_test.cpp +++ b/source/module_elecstate/test/elecstate_pw_test.cpp @@ -127,12 +127,6 @@ Fcoef::~Fcoef() { } #include "module_cell/klist.h" -K_Vectors::K_Vectors() -{ -} -K_Vectors::~K_Vectors() -{ -} void Charge::set_rho_core(const UnitCell& ucell, ModuleBase::ComplexMatrix const&, const bool*) { diff --git a/source/module_esolver/esolver_ks_pw.cpp b/source/module_esolver/esolver_ks_pw.cpp index 6ab0cccba1..84bf0fe8a4 100644 --- a/source/module_esolver/esolver_ks_pw.cpp +++ b/source/module_esolver/esolver_ks_pw.cpp @@ -209,7 +209,7 @@ void ESolver_KS_PW::before_all_runners(UnitCell& ucell, const Input_p GlobalV::MY_RANK, ucell, this->sf, - this->kv.para_k, + this->kv, this->ppcell, *this->pw_wfc); allocate_psi(this->psi, this->kv.get_nks(), this->kv.ngk.data(), PARAM.inp.nbands, this->pw_wfc->npwk_max); diff --git a/source/module_hamilt_lcao/module_deltaspin/test/lambda_loop_helper_test.cpp b/source/module_hamilt_lcao/module_deltaspin/test/lambda_loop_helper_test.cpp index b10e4ea08f..040a20fabd 100644 --- a/source/module_hamilt_lcao/module_deltaspin/test/lambda_loop_helper_test.cpp +++ b/source/module_hamilt_lcao/module_deltaspin/test/lambda_loop_helper_test.cpp @@ -3,12 +3,6 @@ #include "gtest/gtest.h" #include "module_cell/klist.h" -K_Vectors::K_Vectors() -{ -} -K_Vectors::~K_Vectors() -{ -} /************************************************ * unit test of the functions in lambda_loop_helper.cpp ***********************************************/ diff --git a/source/module_hamilt_lcao/module_deltaspin/test/spin_constrain_test.cpp b/source/module_hamilt_lcao/module_deltaspin/test/spin_constrain_test.cpp index 1fd36524e3..e654f0e1ff 100644 --- a/source/module_hamilt_lcao/module_deltaspin/test/spin_constrain_test.cpp +++ b/source/module_hamilt_lcao/module_deltaspin/test/spin_constrain_test.cpp @@ -36,8 +36,6 @@ * get the index of orbital with spin component from (itype, iat, orbital_index) */ #include "module_cell/klist.h" -K_Vectors::K_Vectors(){} -K_Vectors::~K_Vectors(){} template class SpinConstrainTest : public testing::Test diff --git a/source/module_hamilt_lcao/module_deltaspin/test/template_helpers_test.cpp b/source/module_hamilt_lcao/module_deltaspin/test/template_helpers_test.cpp index 374dc380f7..ea0731ae84 100644 --- a/source/module_hamilt_lcao/module_deltaspin/test/template_helpers_test.cpp +++ b/source/module_hamilt_lcao/module_deltaspin/test/template_helpers_test.cpp @@ -16,12 +16,6 @@ * So, we just test if they can be called without error. */ #include "module_cell/klist.h" -K_Vectors::K_Vectors() -{ -} -K_Vectors::~K_Vectors() -{ -} class SpinConstrainTest : public testing::Test { diff --git a/source/module_hamilt_pw/hamilt_pwdft/elecond.cpp b/source/module_hamilt_pw/hamilt_pwdft/elecond.cpp index f7ac5000d4..5f59858132 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/elecond.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/elecond.cpp @@ -137,7 +137,7 @@ void EleCond::jjresponse_ks(const int ik, const int nt, const double dt, const d if (GlobalV::RANK_IN_POOL == 0) { int nkstot = this->p_kv->get_nkstot(); - int ikglobal = K_Vectors::get_ik_global(ik, nkstot); + int ikglobal = p_kv->ik2iktot[ik]; std::stringstream ss; ss << PARAM.globalv.global_out_dir << "vmatrix" << ikglobal + 1 << ".dat"; Binstream binpij(ss.str(), "w"); diff --git a/source/module_hamilt_pw/hamilt_stodft/sto_wf.cpp b/source/module_hamilt_pw/hamilt_stodft/sto_wf.cpp index 6d5accd3b0..8a76daa9e9 100644 --- a/source/module_hamilt_pw/hamilt_stodft/sto_wf.cpp +++ b/source/module_hamilt_pw/hamilt_stodft/sto_wf.cpp @@ -325,7 +325,7 @@ void Stochastic_WF::init_sto_orbitals_Ecut(const int seed_in, for (int ik = 0; ik < nks; ++ik) { - const int iktot = K_Vectors::get_ik_global(ik, nkstot); + const int iktot = kv.ik2iktot[ik]; const int npw = wfcpw.npwk[ik]; int* ig2ixyz = new int[npw]; diff --git a/source/module_hamilt_pw/hamilt_stodft/test/test_hamilt_sto.cpp b/source/module_hamilt_pw/hamilt_stodft/test/test_hamilt_sto.cpp index 305cc548f9..6da83c4ced 100644 --- a/source/module_hamilt_pw/hamilt_stodft/test/test_hamilt_sto.cpp +++ b/source/module_hamilt_pw/hamilt_stodft/test/test_hamilt_sto.cpp @@ -4,8 +4,6 @@ #include "gtest/gtest.h" #include -K_Vectors::K_Vectors(){} -K_Vectors::~K_Vectors(){} elecstate::Potential::~Potential(){} void elecstate::Potential::cal_v_eff(Charge const*, UnitCell const*, ModuleBase::matrix&){} void elecstate::Potential::cal_fixed_v(double*){} diff --git a/source/module_hsolver/test/hsolver_supplementary_mock.h b/source/module_hsolver/test/hsolver_supplementary_mock.h index e670adfe15..808aa8ed5c 100644 --- a/source/module_hsolver/test/hsolver_supplementary_mock.h +++ b/source/module_hsolver/test/hsolver_supplementary_mock.h @@ -146,9 +146,3 @@ void Stochastic_WF::init(K_Vectors* p_kv, const int npwx_in) } #include "module_cell/klist.h" -K_Vectors::K_Vectors() -{ -} -K_Vectors::~K_Vectors() -{ -} diff --git a/source/module_io/read_wfc_pw.cpp b/source/module_io/read_wfc_pw.cpp index 43977d0a3d..331d18138e 100644 --- a/source/module_io/read_wfc_pw.cpp +++ b/source/module_io/read_wfc_pw.cpp @@ -12,6 +12,7 @@ void ModuleIO::read_wfc_pw(const std::string& filename, const ModulePW::PW_Basis_K* pw_wfc, const int& ik, + const int& ikstot, const int& nkstot, ModuleBase::ComplexMatrix& wfc) { @@ -60,28 +61,17 @@ void ModuleIO::read_wfc_pw(const std::string& filename, const int nz = pw_wfc->nz; const int npwk_max = pw_wfc->npwk_max; - int npwtot, ikstot, max_dim; + int npwtot = 0; + int max_dim = 0; - // get npwtot and ikstot + // get npwtot #ifdef __MPI MPI_Allreduce(&pw_wfc->npwk[ik], &npwtot, 1, MPI_INT, MPI_SUM, POOL_WORLD); MPI_Allreduce(&npwk_max, &max_dim, 1, MPI_INT, MPI_MAX, POOL_WORLD); - int nkp = nkstot / GlobalV::KPAR; - int rem = nkstot % GlobalV::KPAR; - if (GlobalV::MY_POOL < rem) - { - ikstot = GlobalV::MY_POOL * nkp + GlobalV::MY_POOL + ik; - } - else - { - ikstot = GlobalV::MY_POOL * nkp + rem + ik; - } #else max_dim = npwk_max; npwtot = pw_wfc->npwk[ik]; - ikstot = ik; #endif - int npwtot_npol = npwtot * PARAM.globalv.npol; diff --git a/source/module_io/read_wfc_pw.h b/source/module_io/read_wfc_pw.h index e1630277bf..4952e307b2 100644 --- a/source/module_io/read_wfc_pw.h +++ b/source/module_io/read_wfc_pw.h @@ -15,12 +15,14 @@ namespace ModuleIO * @param filename filename containing wave functions * @param pw_wfc wave function FFT grids * @param ik k index + * @param ikstot total index of k points * @param nkstot total number of k points * @param wfc wave functions */ void read_wfc_pw(const std::string& filedir, const ModulePW::PW_Basis_K* pw_wfc, const int& ik, + const int& ikstot, const int& nkstot, ModuleBase::ComplexMatrix& wfc); } // namespace ModuleIO diff --git a/source/module_io/read_wfc_to_rho.cpp b/source/module_io/read_wfc_to_rho.cpp index 1a9d6c1237..6fee1bf9a7 100644 --- a/source/module_io/read_wfc_to_rho.cpp +++ b/source/module_io/read_wfc_to_rho.cpp @@ -9,6 +9,7 @@ void ModuleIO::read_wfc_to_rho(const ModulePW::PW_Basis_K* pw_wfc, ModuleSymmetry::Symmetry& symm, + const int* ik2iktot, const int nkstot, const std::vector& isk, Charge& chg) @@ -39,13 +40,29 @@ void ModuleIO::read_wfc_to_rho(const ModulePW::PW_Basis_K* pw_wfc, std::string filename = PARAM.globalv.global_readin_dir + "istate.info"; std::ifstream ifs(filename); std::string useless; - for (int ik_tot = 0; ik_tot < nkstot; ++ik_tot) + if (PARAM.inp.nspin == 2) { - ifs >> useless; - getline(ifs, useless); - for(int ib = 0; ib < nbands; ++ib) + const int nkstot_np = nkstot / 2; + for (int iktot_np = 0; iktot_np < nkstot_np; ++iktot_np) { - ifs >> useless >> useless >> wg_tmp(ik_tot, ib); + ifs >> useless; + getline(ifs, useless); + for (int ib = 0; ib < nbands; ++ib) + { + ifs >> useless >> useless >> wg_tmp(iktot_np, ib) >> useless >> wg_tmp(iktot_np + nkstot_np, ib); + } + } + } + else + { + for (int ik_tot = 0; ik_tot < nkstot; ++ik_tot) + { + ifs >> useless; + getline(ifs, useless); + for (int ib = 0; ib < nbands; ++ib) + { + ifs >> useless >> useless >> wg_tmp(ik_tot, ib); + } } } } @@ -54,20 +71,6 @@ void ModuleIO::read_wfc_to_rho(const ModulePW::PW_Basis_K* pw_wfc, MPI_Bcast(wg_tmp.c, nkstot * nbands, MPI_DOUBLE, 0, MPI_COMM_WORLD); #endif - auto get_ikstot = [&](int ik) { - int nkp = nkstot / kpar; - int rem = nkstot % kpar; - int ikstot; - if (my_pool < rem) - { - ikstot = my_pool * nkp + my_pool + ik; - } - else - { - ikstot = my_pool * nkp + rem + ik; - } - return ikstot; - }; for (int ik = 0; ik < pw_wfc->nks; ++ik) { int is = 0; @@ -75,10 +78,10 @@ void ModuleIO::read_wfc_to_rho(const ModulePW::PW_Basis_K* pw_wfc, { is = isk[ik]; } - const int ikstot = get_ikstot(ik); std::stringstream filename; + const int ikstot = ik2iktot[ik]; filename << PARAM.globalv.global_readin_dir << "WAVEFUNC" << ikstot + 1 << ".dat"; - ModuleIO::read_wfc_pw(filename.str(), pw_wfc, ik, nkstot, wfc_tmp); + ModuleIO::read_wfc_pw(filename.str(), pw_wfc, ik, ikstot, nkstot, wfc_tmp); if (PARAM.inp.nspin == 4) { std::vector> rho_tmp2(nrxx); diff --git a/source/module_io/read_wfc_to_rho.h b/source/module_io/read_wfc_to_rho.h index 3e8492d679..01ec266f36 100644 --- a/source/module_io/read_wfc_to_rho.h +++ b/source/module_io/read_wfc_to_rho.h @@ -19,6 +19,7 @@ namespace ModuleIO */ void read_wfc_to_rho(const ModulePW::PW_Basis_K* pw_wfc, ModuleSymmetry::Symmetry& symm, + const int* ik2iktot, const int nkstot, const std::vector& isk, Charge& chg); diff --git a/source/module_io/test/read_wfc_pw_test.cpp b/source/module_io/test/read_wfc_pw_test.cpp index 1a4830345d..ac13e8a020 100644 --- a/source/module_io/test/read_wfc_pw_test.cpp +++ b/source/module_io/test/read_wfc_pw_test.cpp @@ -55,7 +55,7 @@ TEST_F(ReadWfcPwTest, ReadWfcPw) PARAM.input.nbands = 8; const int nbasis = wfcpw->npwk[0]; ModuleBase::ComplexMatrix wfcatom(PARAM.input.nbands, nbasis); - ModuleIO::read_wfc_pw(filename, wfcpw, 0, nkstot, wfcatom); + ModuleIO::read_wfc_pw(filename, wfcpw, 0, 0, nkstot, wfcatom); if (GlobalV::NPROC_IN_POOL == 1) { @@ -126,7 +126,7 @@ TEST_F(ReadWfcPwTest, NotFoundFile) // dat file std::string filename = "notfound.dat"; testing::internal::CaptureStdout(); - EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, wfcpw, 0, nkstot, wfcatom), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, wfcpw, 0, 0, nkstot, wfcatom), ::testing::ExitedWithCode(1), ""); std::string output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output,testing::HasSubstr("Can't open file notfound.dat")); @@ -134,14 +134,14 @@ TEST_F(ReadWfcPwTest, NotFoundFile) // txt file filename = "notfound.txt"; testing::internal::CaptureStdout(); - EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, wfcpw, 0, nkstot, wfcatom), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, wfcpw, 0, 0, nkstot, wfcatom), ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output,testing::HasSubstr("Can't open file notfound.txt")); // other file filename = "notfound"; testing::internal::CaptureStdout(); - EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, wfcpw, 0, nkstot, wfcatom), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, wfcpw, 0, 0, nkstot, wfcatom), ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output,testing::HasSubstr("Unknown file type und")); } @@ -166,7 +166,7 @@ TEST_F(ReadWfcPwTest, InconsistentBands) const int nbasis = wfcpw->npwk[0]; ModuleBase::ComplexMatrix wfcatom(PARAM.input.nbands, nbasis); testing::internal::CaptureStdout(); - EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, wfcpw, 0, nkstot, wfcatom), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, wfcpw, 0, 0, nkstot, wfcatom), ::testing::ExitedWithCode(1), ""); std::string output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("nbands_in = 8")); EXPECT_THAT(output, testing::HasSubstr("nbands = 4")); @@ -198,7 +198,7 @@ TEST_F(ReadWfcPwTest, InconsistentKvec) const int nbasis = wfcpw->npwk[0]; ModuleBase::ComplexMatrix wfcatom(PARAM.input.nbands, nbasis); testing::internal::CaptureStdout(); - EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, wfcpw, 0, nkstot, wfcatom), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, wfcpw, 0, 0, nkstot, wfcatom), ::testing::ExitedWithCode(1), ""); std::string output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("kvec_in[0] = 0 0 0")); EXPECT_THAT(output, testing::HasSubstr("kvec[0] = -1 1 -1")); @@ -226,7 +226,7 @@ TEST_F(ReadWfcPwTest, InconsistentLat0) const int nbasis = wfcpw->npwk[0]; ModuleBase::ComplexMatrix wfcatom(PARAM.input.nbands, nbasis); testing::internal::CaptureStdout(); - EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, wfcpw, 0, nkstot, wfcatom), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, wfcpw, 0, 0, nkstot, wfcatom), ::testing::ExitedWithCode(1), ""); std::string output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("lat0_in = 5.3233")); EXPECT_THAT(output, testing::HasSubstr("lat0 = 5")); @@ -254,7 +254,7 @@ TEST_F(ReadWfcPwTest, InconsistentG) const int nbasis = wfcpw->npwk[0]; ModuleBase::ComplexMatrix wfcatom(PARAM.input.nbands, nbasis); testing::internal::CaptureStdout(); - EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, wfcpw, 0, nkstot, wfcatom), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, wfcpw, 0, 0, nkstot, wfcatom), ::testing::ExitedWithCode(1), ""); std::string output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("G_in[0] = -1 -1 1\nG_in[1] = 1 1 1\nG_in[2] = -1 1 -1\n")); EXPECT_THAT( diff --git a/source/module_io/test/read_wfc_to_rho_test.cpp b/source/module_io/test/read_wfc_to_rho_test.cpp index cbf0ba0586..6d64b90dd4 100644 --- a/source/module_io/test/read_wfc_to_rho_test.cpp +++ b/source/module_io/test/read_wfc_to_rho_test.cpp @@ -55,12 +55,6 @@ int XC_Functional::get_func_type() { return 0; } -K_Vectors::K_Vectors() -{ -} -K_Vectors::~K_Vectors() -{ -} Symmetry_rho::Symmetry_rho() { } @@ -75,17 +69,20 @@ void Symmetry_rho::begin(const int& spin_now, return; } -int K_Vectors::get_ik_global(const int& ik, const int& nkstot) +void cal_ik2iktot(std::vector& ik2iktot, const int& nks, const int& nkstot) { - int nkp = nkstot / PARAM.inp.kpar; - int rem = nkstot % PARAM.inp.kpar; - if (GlobalV::MY_POOL < rem) - { - return GlobalV::MY_POOL * nkp + GlobalV::MY_POOL + ik; - } - else + for (int ik = 0; ik < nks; ++ik) { - return GlobalV::MY_POOL * nkp + rem + ik; + int nkp = nkstot / PARAM.inp.kpar; + int rem = nkstot % PARAM.inp.kpar; + if (GlobalV::MY_POOL < rem) + { + ik2iktot[ik] = GlobalV::MY_POOL * nkp + GlobalV::MY_POOL + ik; + } + else + { + ik2iktot[ik] = GlobalV::MY_POOL * nkp + rem + ik; + } } } @@ -140,6 +137,8 @@ TEST_F(ReadWfcRhoTest, ReadWfcRho) const double shift = my_pool * 0.1; kv->kvec_d = {ModuleBase::Vector3(shift, shift, shift), ModuleBase::Vector3(0.5 + shift, 0.5 + shift, 0.5 + shift)}; + kv->ik2iktot.resize(nks); + cal_ik2iktot(kv->ik2iktot, nks, nkstot); // Init the pw basis #ifdef __MPI @@ -230,7 +229,7 @@ TEST_F(ReadWfcRhoTest, ReadWfcRho) ModuleIO::write_wfc_pw("WAVEFUNC", *psi, *kv, wfcpw); // Read the wave functions to charge density - ModuleIO::read_wfc_to_rho(wfcpw, symm, nkstot, kv->isk, chg); + ModuleIO::read_wfc_to_rho(wfcpw, symm, kv->ik2iktot.data(), nkstot, kv->isk, chg); // compare the charge density for (int ir = 0; ir < rhopw->nrxx; ++ir) @@ -239,9 +238,9 @@ TEST_F(ReadWfcRhoTest, ReadWfcRho) } // std::cout.precision(16); // std::cout< ref = {8207.849135313403, 35.34776105132742, 8207.849135313403, 35.34776105132742}; EXPECT_NEAR(chg.rho[0][0], ref[GlobalV::MY_RANK], 1e-8); diff --git a/source/module_io/test_serial/nscf_band_test.cpp b/source/module_io/test_serial/nscf_band_test.cpp index 078226a94e..be3a359f92 100644 --- a/source/module_io/test_serial/nscf_band_test.cpp +++ b/source/module_io/test_serial/nscf_band_test.cpp @@ -3,13 +3,6 @@ #include "module_io/nscf_band.h" #include "module_cell/parallel_kpoints.h" #include "module_cell/klist.h" -K_Vectors::K_Vectors() -{ -} - -K_Vectors::~K_Vectors() -{ -} /************************************************ diff --git a/source/module_io/to_wannier90_lcao_in_pw.cpp b/source/module_io/to_wannier90_lcao_in_pw.cpp index 24b7cec15c..78f04a8a97 100644 --- a/source/module_io/to_wannier90_lcao_in_pw.cpp +++ b/source/module_io/to_wannier90_lcao_in_pw.cpp @@ -46,7 +46,7 @@ void toWannier90_LCAO_IN_PW::calculate( ModulePW::PW_Basis_K* wfcpw_ptr = const_cast(wfcpw); delete this->psi_initer_; this->psi_initer_ = new psi_initializer_nao>(); - this->psi_initer_->initialize(sf_ptr, wfcpw_ptr, &ucell, &kv.para_k, 1, nullptr, GlobalV::MY_RANK); + this->psi_initer_->initialize(sf_ptr, wfcpw_ptr, &ucell, &kv, 1, nullptr, GlobalV::MY_RANK); this->psi_initer_->tabulate(); delete this->psi; const int nks_psi = (PARAM.inp.calculation == "nscf" && PARAM.inp.mem_saver == 1)? 1 : wfcpw->nks; diff --git a/source/module_io/write_wfc_pw.cpp b/source/module_io/write_wfc_pw.cpp index 640608e078..d00ca6a41f 100644 --- a/source/module_io/write_wfc_pw.cpp +++ b/source/module_io/write_wfc_pw.cpp @@ -66,13 +66,11 @@ void ModuleIO::write_wfc_pw(const std::string& fn, int ikstot = 0; // ikstot : the index within all k-points const int ng = kv.ngk[ik]; const int ng_max = wfcpw->npwk_max; + ikstot = kv.ik2iktot[ik]; #ifdef __MPI MPI_Allreduce(&kv.ngk[ik], &ikngtot, 1, MPI_INT, MPI_SUM, POOL_WORLD); - - ikstot = K_Vectors::get_ik_global(ik, nkstot); #else - ikngtot = kv.ngk[ik]; - ikstot = ik; + ikngtot = kv.ngk[ik]; #endif const int ikngtot_npol = ikngtot * PARAM.globalv.npol; #ifdef __MPI diff --git a/source/module_psi/psi_init.cpp b/source/module_psi/psi_init.cpp index 24708c9665..2cdce4a5a8 100644 --- a/source/module_psi/psi_init.cpp +++ b/source/module_psi/psi_init.cpp @@ -22,10 +22,10 @@ PSIInit::PSIInit(const std::string& init_wfc_in, const int& rank_in, const UnitCell& ucell_in, const Structure_Factor& sf_in, - const Parallel_Kpoints& parakpts_in, + const K_Vectors& kv_in, const pseudopot_cell_vnl& nlpp_in, const ModulePW::PW_Basis_K& pw_wfc_in) - : ucell(ucell_in), sf(sf_in), nlpp(nlpp_in), parakpts(parakpts_in), pw_wfc(pw_wfc_in), rank(rank_in) + : ucell(ucell_in), sf(sf_in), nlpp(nlpp_in), kv(kv_in), pw_wfc(pw_wfc_in), rank(rank_in) { this->init_wfc = init_wfc_in; this->ks_solver = ks_solver_in; @@ -74,7 +74,7 @@ void PSIInit::prepare_init(const int& random_seed) ModuleBase::WARNING_QUIT("PSIInit::prepare_init", "for new psi initializer, init_wfc type not supported"); } - this->psi_initer->initialize(&sf, &pw_wfc, &ucell, ¶kpts, random_seed, &nlpp, rank); + this->psi_initer->initialize(&sf, &pw_wfc, &ucell, &kv, random_seed, &nlpp, rank); this->psi_initer->tabulate(); ModuleBase::timer::tick("PSIInit", "prepare_init"); diff --git a/source/module_psi/psi_init.h b/source/module_psi/psi_init.h index 712952e634..e112a71a6e 100644 --- a/source/module_psi/psi_init.h +++ b/source/module_psi/psi_init.h @@ -17,7 +17,7 @@ class PSIInit const int& rank, const UnitCell& ucell, const Structure_Factor& sf, - const Parallel_Kpoints& parakpts, + const K_Vectors& kv_in, const pseudopot_cell_vnl& nlpp, const ModulePW::PW_Basis_K& pw_wfc); ~PSIInit(){}; @@ -65,7 +65,7 @@ class PSIInit const ModulePW::PW_Basis_K& pw_wfc; // parallel kpoints - const Parallel_Kpoints& parakpts; + const K_Vectors& kv; // unit cell const UnitCell& ucell; diff --git a/source/module_psi/psi_initializer.cpp b/source/module_psi/psi_initializer.cpp index 36c7624bda..982ef2fdce 100644 --- a/source/module_psi/psi_initializer.cpp +++ b/source/module_psi/psi_initializer.cpp @@ -12,6 +12,23 @@ #include "module_base/parallel_reduce.h" #endif +template +void psi_initializer::initialize(const Structure_Factor* sf, + const ModulePW::PW_Basis_K* pw_wfc, + const UnitCell* p_ucell, + const K_Vectors* p_kv_in, + const int& random_seed, + const pseudopot_cell_vnl* p_pspot_nl, + const int& rank) +{ + this->sf_ = sf; + this->pw_wfc_ = pw_wfc; + this->p_ucell_ = p_ucell; + this->p_kv = p_kv_in; + this->random_seed_ = random_seed; + this->p_pspot_nl_ = p_pspot_nl; +} + template void psi_initializer::random_t(T* psi, const int iw_start, const int iw_end, const int ik, const int mode) { @@ -27,7 +44,7 @@ void psi_initializer::random_t(T* psi, const int iw_start, const int iw_end, if (this->random_seed_ > 0) // qianrui add 2021-8-13 { #ifdef __MPI - srand(unsigned(this->random_seed_ + this->p_parakpts_->startk_pool[GlobalV::MY_POOL] + ik)); + srand(unsigned(this->random_seed_ + this->p_kv->ik2iktot[ik])); #else srand(unsigned(this->random_seed_ + ik)); #endif diff --git a/source/module_psi/psi_initializer.h b/source/module_psi/psi_initializer.h index 876be12bda..e54ff9d3ff 100644 --- a/source/module_psi/psi_initializer.h +++ b/source/module_psi/psi_initializer.h @@ -14,7 +14,7 @@ #endif #include "module_base/macros.h" #include "module_base/parallel_global.h" -#include "module_cell/parallel_kpoints.h" +#include "module_cell/klist.h" #include /* @@ -61,11 +61,10 @@ class psi_initializer virtual void initialize(const Structure_Factor*, //< structure factor const ModulePW::PW_Basis_K*, //< planewave basis const UnitCell*, //< unit cell - const Parallel_Kpoints* = nullptr, //< parallel kpoints + const K_Vectors* = nullptr, //< parallel kpoints const int& = 1, //< random seed const pseudopot_cell_vnl* = nullptr, //< nonlocal pseudopotential - const int& = 0) - = 0; //< MPI rank + const int& = 0); //< rank /// @brief CENTRAL FUNCTION: calculate the interpolate table if needed virtual void tabulate() @@ -129,7 +128,7 @@ class psi_initializer const Structure_Factor* sf_ = nullptr; ///< Structure_Factor const ModulePW::PW_Basis_K* pw_wfc_ = nullptr; ///< use |k+G>, |G>, getgpluskcar and so on in PW_Basis_K const UnitCell* p_ucell_ = nullptr; ///< UnitCell - const Parallel_Kpoints* p_parakpts_ = nullptr; ///< Parallel_Kpoints + const K_Vectors* p_kv = nullptr; ///< Parallel_Kpoints const pseudopot_cell_vnl* p_pspot_nl_ = nullptr; ///< pseudopot_cell_vnl int random_seed_ = 1; ///< random seed, shared by random, atomic+random, nao+random std::vector ixy2is_; ///< used by stick_to_pool function diff --git a/source/module_psi/psi_initializer_atomic.cpp b/source/module_psi/psi_initializer_atomic.cpp index 6c86910bdb..d5ea4583b0 100644 --- a/source/module_psi/psi_initializer_atomic.cpp +++ b/source/module_psi/psi_initializer_atomic.cpp @@ -50,7 +50,7 @@ template void psi_initializer_atomic::initialize(const Structure_Factor* sf, //< structure factor const ModulePW::PW_Basis_K* pw_wfc, //< planewave basis const UnitCell* p_ucell, //< unit cell - const Parallel_Kpoints* p_parakpts, //< parallel kpoints + const K_Vectors* p_kv_in, const int& random_seed, //< random seed const pseudopot_cell_vnl* p_pspot_nl, const int& rank) @@ -62,12 +62,7 @@ void psi_initializer_atomic::initialize(const Structure_Factor* sf, / "pseudopot_cell_vnl object cannot be nullptr for atomic, quit."); } // import - this->sf_ = sf; - this->pw_wfc_ = pw_wfc; - this->p_ucell_ = p_ucell; - this->p_parakpts_ = p_parakpts; - this->p_pspot_nl_ = p_pspot_nl; - this->random_seed_ = random_seed; + psi_initializer::initialize(sf, pw_wfc, p_ucell, p_kv_in, random_seed, p_pspot_nl, rank); this->nbands_start_ = std::max(this->p_ucell_->natomwfc, PARAM.inp.nbands); this->nbands_complem_ = this->nbands_start_ - this->p_ucell_->natomwfc; // allocate diff --git a/source/module_psi/psi_initializer_atomic.h b/source/module_psi/psi_initializer_atomic.h index ef475dc7e2..402e63af59 100644 --- a/source/module_psi/psi_initializer_atomic.h +++ b/source/module_psi/psi_initializer_atomic.h @@ -23,12 +23,12 @@ class psi_initializer_atomic : public psi_initializer virtual void initialize(const Structure_Factor*, //< structure factor const ModulePW::PW_Basis_K*, //< planewave basis const UnitCell*, //< unit cell - const Parallel_Kpoints*, //< parallel kpoints - const int& = 1, //< random seed + const K_Vectors*, //< kpoints + const int& = 1, //< random seed const pseudopot_cell_vnl* = nullptr, //< nonlocal pseudopotential - const int& = 0) override; //< MPI rank + const int& = 0) override; //< MPI rank virtual void tabulate() override; - virtual void init_psig(T* psig, const int& ik) override; + virtual void init_psig(T* psig, const int& ik) override; protected: // allocate memory for overlap table diff --git a/source/module_psi/psi_initializer_atomic_random.cpp b/source/module_psi/psi_initializer_atomic_random.cpp index b97e6fe5d9..f7b735f5ed 100644 --- a/source/module_psi/psi_initializer_atomic_random.cpp +++ b/source/module_psi/psi_initializer_atomic_random.cpp @@ -6,12 +6,12 @@ template void psi_initializer_atomic_random::initialize(const Structure_Factor* sf, //< structure factor const ModulePW::PW_Basis_K* pw_wfc, //< planewave basis const UnitCell* p_ucell, //< unit cell - const Parallel_Kpoints* p_parakpts, //< parallel kpoints - const int& random_seed, //< random seed + const K_Vectors* p_kv_in, + const int& random_seed, //< random seed const pseudopot_cell_vnl* p_pspot_nl, const int& rank) { - psi_initializer_atomic::initialize(sf, pw_wfc, p_ucell, p_parakpts, random_seed, p_pspot_nl, rank); + psi_initializer_atomic::initialize(sf, pw_wfc, p_ucell, p_kv_in, random_seed, p_pspot_nl, rank); } template diff --git a/source/module_psi/psi_initializer_atomic_random.h b/source/module_psi/psi_initializer_atomic_random.h index 1ee2353310..4055819fcc 100644 --- a/source/module_psi/psi_initializer_atomic_random.h +++ b/source/module_psi/psi_initializer_atomic_random.h @@ -25,12 +25,12 @@ class psi_initializer_atomic_random : public psi_initializer_atomic virtual void initialize(const Structure_Factor*, //< structure factor const ModulePW::PW_Basis_K*, //< planewave basis const UnitCell*, //< unit cell - const Parallel_Kpoints*, //< parallel kpoints - const int& = 1, //< random seed + const K_Vectors*, //< kpoints + const int& = 1, //< random seed const pseudopot_cell_vnl* = nullptr, //< nonlocal pseudopotential - const int& = 0) override; //< MPI rank + const int& = 0) override; //< MPI rank - virtual void init_psig(T* psig, const int& ik) override; + virtual void init_psig(T* psig, const int& ik) override; private: }; diff --git a/source/module_psi/psi_initializer_file.cpp b/source/module_psi/psi_initializer_file.cpp index a1871672f9..169772aa49 100644 --- a/source/module_psi/psi_initializer_file.cpp +++ b/source/module_psi/psi_initializer_file.cpp @@ -8,16 +8,12 @@ template void psi_initializer_file::initialize(const Structure_Factor* sf, const ModulePW::PW_Basis_K* pw_wfc, const UnitCell* p_ucell, - const Parallel_Kpoints* p_parakpts, + const K_Vectors* p_kv_in, const int& random_seed, const pseudopot_cell_vnl* p_pspot_nl, const int& rank) { - this->pw_wfc_ = pw_wfc; - this->p_ucell_ = p_ucell; - this->p_parakpts_ = p_parakpts; - this->random_seed_ = random_seed; - this->p_pspot_nl_ = p_pspot_nl; + psi_initializer::initialize(sf, pw_wfc, p_ucell, p_kv_in, random_seed, p_pspot_nl, rank); this->nbands_start_ = PARAM.inp.nbands; this->nbands_complem_ = 0; } @@ -28,13 +24,12 @@ void psi_initializer_file::init_psig(T* psig, const int& ik) ModuleBase::timer::tick("psi_initializer_file", "init_psig"); const int npol = PARAM.globalv.npol; const int nbasis = this->pw_wfc_->npwk_max * npol; - const int pre_nk = PARAM.inp.nspin == 2 ? 2 : 1; - const int nkstot = this->p_parakpts_->nkstot_np * pre_nk; + const int nkstot = this->p_kv->get_nkstot(); ModuleBase::ComplexMatrix wfcatom(this->nbands_start_, nbasis); std::stringstream filename; - int ik_tot = K_Vectors::get_ik_global(ik, nkstot); + int ik_tot = this->p_kv->ik2iktot[ik]; filename << PARAM.globalv.global_readin_dir << "WAVEFUNC" << ik_tot + 1 << ".dat"; - ModuleIO::read_wfc_pw(filename.str(), this->pw_wfc_, ik, nkstot, wfcatom); + ModuleIO::read_wfc_pw(filename.str(), this->pw_wfc_, ik, ik_tot, nkstot, wfcatom); assert(this->nbands_start_ <= wfcatom.nr); for (int ib = 0; ib < this->nbands_start_; ib++) diff --git a/source/module_psi/psi_initializer_file.h b/source/module_psi/psi_initializer_file.h index e4e527b4f7..115f0425c3 100644 --- a/source/module_psi/psi_initializer_file.h +++ b/source/module_psi/psi_initializer_file.h @@ -18,19 +18,19 @@ class psi_initializer_file : public psi_initializer this->method_ = "file"; }; ~psi_initializer_file(){}; - + /// @brief initialize the psi_initializer with external data and methods virtual void initialize(const Structure_Factor*, //< structure factor const ModulePW::PW_Basis_K*, //< planewave basis const UnitCell*, //< unit cell - const Parallel_Kpoints*, //< parallel kpoints - const int& = 1, //< random seed + const K_Vectors*, //< kpoints + const int& = 1, //< random seed const pseudopot_cell_vnl* = nullptr, //< nonlocal pseudopotential - const int& = 0) override; //< MPI rank - + const int& = 0) override; //< MPI rank + /// @brief calculate and output planewave wavefunction /// @param ik kpoint index /// @return initialized planewave wavefunction (psi::Psi>*) - virtual void init_psig(T* psig, const int& ik) override; + virtual void init_psig(T* psig, const int& ik) override; }; #endif \ No newline at end of file diff --git a/source/module_psi/psi_initializer_nao.cpp b/source/module_psi/psi_initializer_nao.cpp index de71457c73..c2bb249501 100644 --- a/source/module_psi/psi_initializer_nao.cpp +++ b/source/module_psi/psi_initializer_nao.cpp @@ -150,7 +150,7 @@ template void psi_initializer_nao::initialize(const Structure_Factor* sf, const ModulePW::PW_Basis_K* pw_wfc, const UnitCell* p_ucell, - const Parallel_Kpoints* p_parakpts, + const K_Vectors* p_kv_in, const int& random_seed, const pseudopot_cell_vnl* p_pspot_nl, const int& rank) @@ -158,12 +158,7 @@ void psi_initializer_nao::initialize(const Structure_Factor* sf, ModuleBase::timer::tick("psi_initializer_nao", "initialize_mpi"); // import - this->sf_ = sf; - this->pw_wfc_ = pw_wfc; - this->p_ucell_ = p_ucell; - this->p_parakpts_ = p_parakpts; - this->p_pspot_nl_ = p_pspot_nl; - this->random_seed_ = random_seed; + psi_initializer::initialize(sf, pw_wfc, p_ucell, p_kv_in, random_seed, p_pspot_nl, rank); // allocate this->allocate_ao_table(); diff --git a/source/module_psi/psi_initializer_nao.h b/source/module_psi/psi_initializer_nao.h index 324e201df1..c9ba087ed6 100644 --- a/source/module_psi/psi_initializer_nao.h +++ b/source/module_psi/psi_initializer_nao.h @@ -21,16 +21,16 @@ class psi_initializer_nao : public psi_initializer }; ~psi_initializer_nao(){}; - virtual void init_psig(T* psig, const int& ik) override; + virtual void init_psig(T* psig, const int& ik) override; /// @brief initialize the psi_initializer with external data and methods virtual void initialize(const Structure_Factor*, //< structure factor const ModulePW::PW_Basis_K*, //< planewave basis const UnitCell*, //< unit cell - const Parallel_Kpoints*, //< parallel kpoints - const int& = 1, //< random seed + const K_Vectors*, //< kpoints + const int& = 1, //< random seed const pseudopot_cell_vnl* = nullptr, //< nonlocal pseudopotential - const int& = 0) override; //< MPI rank + const int& = 0) override; //< MPI rank void read_external_orbs(const std::string* orbital_files, const int& rank); virtual void tabulate() override; diff --git a/source/module_psi/psi_initializer_nao_random.cpp b/source/module_psi/psi_initializer_nao_random.cpp index ef0811fd9d..4f8b8d940f 100644 --- a/source/module_psi/psi_initializer_nao_random.cpp +++ b/source/module_psi/psi_initializer_nao_random.cpp @@ -6,12 +6,12 @@ template void psi_initializer_nao_random::initialize(const Structure_Factor* sf, const ModulePW::PW_Basis_K* pw_wfc, const UnitCell* p_ucell, - const Parallel_Kpoints* p_parakpts, + const K_Vectors* p_kv_in, const int& random_seed, const pseudopot_cell_vnl* p_pspot_nl, const int& rank) { - psi_initializer_nao::initialize(sf, pw_wfc, p_ucell, p_parakpts, random_seed, p_pspot_nl, rank); + psi_initializer_nao::initialize(sf, pw_wfc, p_ucell, p_kv_in, random_seed, p_pspot_nl, rank); } template diff --git a/source/module_psi/psi_initializer_nao_random.h b/source/module_psi/psi_initializer_nao_random.h index acbdb76945..b4d533cea6 100644 --- a/source/module_psi/psi_initializer_nao_random.h +++ b/source/module_psi/psi_initializer_nao_random.h @@ -25,11 +25,11 @@ class psi_initializer_nao_random : public psi_initializer_nao virtual void initialize(const Structure_Factor*, //< structure factor const ModulePW::PW_Basis_K*, //< planewave basis const UnitCell*, //< unit cell - const Parallel_Kpoints*, //< parallel kpoints - const int& = 1, //< random seed + const K_Vectors*, //< kpoints + const int& = 1, //< random seed const pseudopot_cell_vnl* = nullptr, //< nonlocal pseudopotential - const int& = 0) override; //< MPI rank + const int& = 0) override; //< MPI rank - virtual void init_psig(T* psig, const int& ik) override; + virtual void init_psig(T* psig, const int& ik) override; }; #endif \ No newline at end of file diff --git a/source/module_psi/psi_initializer_random.cpp b/source/module_psi/psi_initializer_random.cpp index 56497d5c7b..84905513e3 100644 --- a/source/module_psi/psi_initializer_random.cpp +++ b/source/module_psi/psi_initializer_random.cpp @@ -11,16 +11,12 @@ template void psi_initializer_random::initialize(const Structure_Factor* sf, const ModulePW::PW_Basis_K* pw_wfc, const UnitCell* p_ucell, - const Parallel_Kpoints* p_parakpts, + const K_Vectors* p_kv_in, const int& random_seed, const pseudopot_cell_vnl* p_pspot_nl, const int& rank) { - this->pw_wfc_ = pw_wfc; - this->p_ucell_ = p_ucell; - this->p_parakpts_ = p_parakpts; - this->random_seed_ = random_seed; - this->p_pspot_nl_ = p_pspot_nl; + psi_initializer::initialize(sf, pw_wfc, p_ucell, p_kv_in, random_seed, p_pspot_nl, rank); this->ixy2is_.clear(); this->ixy2is_.resize(this->pw_wfc_->fftnxy); this->pw_wfc_->getfftixy2is(this->ixy2is_.data()); diff --git a/source/module_psi/psi_initializer_random.h b/source/module_psi/psi_initializer_random.h index 9285bd9bcf..c2f66d6020 100644 --- a/source/module_psi/psi_initializer_random.h +++ b/source/module_psi/psi_initializer_random.h @@ -27,9 +27,9 @@ class psi_initializer_random : public psi_initializer virtual void initialize(const Structure_Factor*, //< structure factor const ModulePW::PW_Basis_K*, //< planewave basis const UnitCell*, //< unit cell - const Parallel_Kpoints*, //< parallel kpoints - const int& = 1, //< random seed + const K_Vectors*, //< kpoints + const int& = 1, //< random seed const pseudopot_cell_vnl* = nullptr, //< nonlocal pseudopotential - const int& = 0) override; //< MPI rank + const int& = 0) override; //< MPI rank }; #endif \ No newline at end of file diff --git a/source/module_psi/test/psi_initializer_unit_test.cpp b/source/module_psi/test/psi_initializer_unit_test.cpp index d4e30234c9..fd9dcd497c 100644 --- a/source/module_psi/test/psi_initializer_unit_test.cpp +++ b/source/module_psi/test/psi_initializer_unit_test.cpp @@ -90,18 +90,13 @@ std::complex* Structure_Factor::get_sk(int ik, int it, int ia, ModulePW: return sk; } -int K_Vectors::get_ik_global(const int& ik, const int& nkstot) -{ - return ik; -} - class PsiIntializerUnitTest : public ::testing::Test { public: Structure_Factor* p_sf = nullptr; ModulePW::PW_Basis_K* p_pw_wfc = nullptr; UnitCell* p_ucell = nullptr; pseudopot_cell_vnl* p_pspot_vnl = nullptr; - Parallel_Kpoints* p_parakpts = nullptr; + K_Vectors* p_kv = nullptr; int random_seed = 1; psi_initializer>* psi_init; @@ -115,7 +110,7 @@ class PsiIntializerUnitTest : public ::testing::Test { this->p_pw_wfc = new ModulePW::PW_Basis_K(); this->p_ucell = new UnitCell(); this->p_pspot_vnl = new pseudopot_cell_vnl(); - this->p_parakpts = new Parallel_Kpoints(); + this->p_kv = new K_Vectors(); // mock PARAM.input.nbands = 1; PARAM.input.nspin = 1; @@ -261,8 +256,8 @@ class PsiIntializerUnitTest : public ::testing::Test { this->p_pspot_vnl->lmaxkb = 1; - this->p_parakpts->startk_pool.resize(1); - this->p_parakpts->startk_pool[0] = 0; + this->p_kv->ik2iktot.resize(1); + this->p_kv->ik2iktot[0] = 0; } void TearDown() override @@ -272,7 +267,7 @@ class PsiIntializerUnitTest : public ::testing::Test { delete this->p_pw_wfc; delete this->p_ucell; delete this->p_pspot_vnl; - delete this->p_parakpts; + delete this->p_kv; } }; @@ -319,7 +314,7 @@ TEST_F(PsiIntializerUnitTest, CalPsigRandom) { this->psi_init->initialize(this->p_sf, this->p_pw_wfc, this->p_ucell, - this->p_parakpts, + this->p_kv, this->random_seed, this->p_pspot_vnl, GlobalV::MY_RANK); @@ -338,7 +333,7 @@ TEST_F(PsiIntializerUnitTest, CalPsigAtomic) { this->psi_init->initialize(this->p_sf, this->p_pw_wfc, this->p_ucell, - this->p_parakpts, + this->p_kv, this->random_seed, this->p_pspot_vnl, GlobalV::MY_RANK); @@ -361,7 +356,7 @@ TEST_F(PsiIntializerUnitTest, CalPsigAtomicSoc) { this->psi_init->initialize(this->p_sf, this->p_pw_wfc, this->p_ucell, - this->p_parakpts, + this->p_kv, this->random_seed, this->p_pspot_vnl, GlobalV::MY_RANK); @@ -388,7 +383,7 @@ TEST_F(PsiIntializerUnitTest, CalPsigAtomicSocHasSo) { this->psi_init->initialize(this->p_sf, this->p_pw_wfc, this->p_ucell, - this->p_parakpts, + this->p_kv, this->random_seed, this->p_pspot_vnl, GlobalV::MY_RANK); @@ -411,7 +406,7 @@ TEST_F(PsiIntializerUnitTest, CalPsigAtomicRandom) { this->psi_init->initialize(this->p_sf, this->p_pw_wfc, this->p_ucell, - this->p_parakpts, + this->p_kv, this->random_seed, this->p_pspot_vnl, GlobalV::MY_RANK); @@ -430,7 +425,7 @@ TEST_F(PsiIntializerUnitTest, CalPsigNao) { this->psi_init->initialize(this->p_sf, this->p_pw_wfc, this->p_ucell, - this->p_parakpts, + this->p_kv, this->random_seed, this->p_pspot_vnl, GlobalV::MY_RANK); @@ -449,7 +444,7 @@ TEST_F(PsiIntializerUnitTest, CalPsigNaoRandom) { this->psi_init->initialize(this->p_sf, this->p_pw_wfc, this->p_ucell, - this->p_parakpts, + this->p_kv, this->random_seed, this->p_pspot_vnl, GlobalV::MY_RANK); @@ -473,7 +468,7 @@ TEST_F(PsiIntializerUnitTest, CalPsigNaoSoc) { this->psi_init->initialize(this->p_sf, this->p_pw_wfc, this->p_ucell, - this->p_parakpts, + this->p_kv, this->random_seed, this->p_pspot_vnl, GlobalV::MY_RANK); @@ -497,7 +492,7 @@ TEST_F(PsiIntializerUnitTest, CalPsigNaoSocHasSo) { this->psi_init->initialize(this->p_sf, this->p_pw_wfc, this->p_ucell, - this->p_parakpts, + this->p_kv, this->random_seed, this->p_pspot_vnl, GlobalV::MY_RANK); @@ -521,7 +516,7 @@ TEST_F(PsiIntializerUnitTest, CalPsigNaoSocHasSoDOMAG) { this->psi_init->initialize(this->p_sf, this->p_pw_wfc, this->p_ucell, - this->p_parakpts, + this->p_kv, this->random_seed, this->p_pspot_vnl, GlobalV::MY_RANK); diff --git a/tests/integrate/101_PW_upf201_uspp_Fe/result.ref b/tests/integrate/101_PW_upf201_uspp_Fe/result.ref index 0f6659ed9c..293616c602 100644 --- a/tests/integrate/101_PW_upf201_uspp_Fe/result.ref +++ b/tests/integrate/101_PW_upf201_uspp_Fe/result.ref @@ -1,5 +1,5 @@ -etotref -673.8349337888099626 -etotperatomref -673.8349337888 +etotref -673.8349306935572258 +etotperatomref -673.8349306936 totalforceref 0.000000 -totalstressref 66620.402512 -totaltimeref 0.75 +totalstressref 66620.323844 +totaltimeref 1.34 diff --git a/tests/integrate/127_PW_15_PK_AF_wfcinit/INPUT b/tests/integrate/127_PW_15_PK_AF_wfcinit/INPUT new file mode 100644 index 0000000000..9da4604f8d --- /dev/null +++ b/tests/integrate/127_PW_15_PK_AF_wfcinit/INPUT @@ -0,0 +1,28 @@ +INPUT_PARAMETERS +suffix autotest + +nbands 10 + +calculation scf +ecutwfc 8 +scf_thr 1.0e-10 +scf_nmax 1 + +smearing_method gaussian +smearing_sigma 0.02 + +mixing_type broyden +mixing_beta 0.4 + +ks_solver cg +basis_type pw +symmetry 0 +nspin 2 +pseudo_dir ../../PP_ORB + +pw_seed 1 + +kpar 2 +# out_wfc_pw 2 +init_wfc file +init_chg wfc diff --git a/tests/integrate/127_PW_15_PK_AF_wfcinit/KPT b/tests/integrate/127_PW_15_PK_AF_wfcinit/KPT new file mode 100644 index 0000000000..e769af7638 --- /dev/null +++ b/tests/integrate/127_PW_15_PK_AF_wfcinit/KPT @@ -0,0 +1,4 @@ +K_POINTS +0 +Gamma +2 1 1 0 0 0 diff --git a/tests/integrate/127_PW_15_PK_AF_wfcinit/OUT.autotest/WAVEFUNC1.dat b/tests/integrate/127_PW_15_PK_AF_wfcinit/OUT.autotest/WAVEFUNC1.dat new file mode 100644 index 0000000000..c9131db655 Binary files /dev/null and b/tests/integrate/127_PW_15_PK_AF_wfcinit/OUT.autotest/WAVEFUNC1.dat differ diff --git a/tests/integrate/127_PW_15_PK_AF_wfcinit/OUT.autotest/WAVEFUNC2.dat b/tests/integrate/127_PW_15_PK_AF_wfcinit/OUT.autotest/WAVEFUNC2.dat new file mode 100644 index 0000000000..ae555ae7b7 Binary files /dev/null and b/tests/integrate/127_PW_15_PK_AF_wfcinit/OUT.autotest/WAVEFUNC2.dat differ diff --git a/tests/integrate/127_PW_15_PK_AF_wfcinit/OUT.autotest/WAVEFUNC3.dat b/tests/integrate/127_PW_15_PK_AF_wfcinit/OUT.autotest/WAVEFUNC3.dat new file mode 100644 index 0000000000..42fd8b9b70 Binary files /dev/null and b/tests/integrate/127_PW_15_PK_AF_wfcinit/OUT.autotest/WAVEFUNC3.dat differ diff --git a/tests/integrate/127_PW_15_PK_AF_wfcinit/OUT.autotest/WAVEFUNC4.dat b/tests/integrate/127_PW_15_PK_AF_wfcinit/OUT.autotest/WAVEFUNC4.dat new file mode 100644 index 0000000000..109ba171ef Binary files /dev/null and b/tests/integrate/127_PW_15_PK_AF_wfcinit/OUT.autotest/WAVEFUNC4.dat differ diff --git a/tests/integrate/127_PW_15_PK_AF_wfcinit/OUT.autotest/istate.info b/tests/integrate/127_PW_15_PK_AF_wfcinit/OUT.autotest/istate.info new file mode 100644 index 0000000000..c81d6811cf --- /dev/null +++ b/tests/integrate/127_PW_15_PK_AF_wfcinit/OUT.autotest/istate.info @@ -0,0 +1,26 @@ +BAND Spin up Energy(ev) Occupation Spin down Energy(ev) Occupation Kpoint = 1 (0 0 0) + 1 -34.6013 0.5 -33.7761 0.5 + 2 -2.58855 0.5 -2.08974 0.5 + 3 1.86986 0.5 2.7984 0.5 + 4 1.91195 0.5 2.79982 0.5 + 5 23.9461 0.5 24.2851 0.5 + 6 42.8714 0.5 43.4213 0.5 + 7 42.892 0.5 43.4713 0.5 + 8 47.1737 0.5 47.5816 0.5 + 9 55.927 0 56.4901 0 + 10 57.1475 0 59.2227 0 + + +BAND Spin up Energy(ev) Occupation Spin down Energy(ev) Occupation Kpoint = 2 (0.5 0 0) + 1 -13.2966 0.5 -12.4566 0.5 + 2 -4.22422 0.5 -3.61022 0.5 + 3 5.20853 0.5 5.15653 0.5 + 4 4.99881 0.5 6.43699 0.5 + 5 29.4915 0.5 29.8951 0.5 + 6 34.7709 0.5 35.236 0.5 + 7 38.1075 0.5 38.4163 0.5 + 8 47.7803 0.5 48.3026 0.5 + 9 51.2238 6.10623e-15 51.6084 0 + 10 53.4218 0 53.7871 0 + + diff --git a/tests/integrate/127_PW_15_PK_AF_wfcinit/README b/tests/integrate/127_PW_15_PK_AF_wfcinit/README new file mode 100644 index 0000000000..21b02c2e09 --- /dev/null +++ b/tests/integrate/127_PW_15_PK_AF_wfcinit/README @@ -0,0 +1,7 @@ +Fe Antiferromagnetic +NSPIN 2 +pw +init magnet: up + down +SG15 +init_wfc file +init_chg wfc diff --git a/tests/integrate/127_PW_15_PK_AF_wfcinit/STRU b/tests/integrate/127_PW_15_PK_AF_wfcinit/STRU new file mode 100644 index 0000000000..f7e6647962 --- /dev/null +++ b/tests/integrate/127_PW_15_PK_AF_wfcinit/STRU @@ -0,0 +1,19 @@ +ATOMIC_SPECIES +Fe 1.000 Fe_ONCV_PBE-1.0.upf + +LATTICE_CONSTANT +5 + +LATTICE_VECTORS + 1.00 0.50 0.50 + 0.50 1.00 0.50 + 0.50 0.50 1.00 +ATOMIC_POSITIONS +Direct + +Fe +1.0 +1 +0.00 0.00 0.00 1 1 1 + + diff --git a/tests/integrate/127_PW_15_PK_AF_wfcinit/result.ref b/tests/integrate/127_PW_15_PK_AF_wfcinit/result.ref new file mode 100644 index 0000000000..16d4ecfa7d --- /dev/null +++ b/tests/integrate/127_PW_15_PK_AF_wfcinit/result.ref @@ -0,0 +1,3 @@ +etotref -2511.209813664946 +etotperatomref -2511.2098136649 +totaltimeref 0.07 diff --git a/tests/integrate/CASES_CPU.txt b/tests/integrate/CASES_CPU.txt index 9dbfc1a6b1..db834ee8e0 100644 --- a/tests/integrate/CASES_CPU.txt +++ b/tests/integrate/CASES_CPU.txt @@ -100,6 +100,7 @@ 121_PW_KPAR 121_PW_kspacing 127_PW_15_PK_AF +127_PW_15_PK_AF_wfcinit 123_PW_zero_atom 128_PW_zero_ntype 133_PW_DJ_PK