From f0cd8ca07691e4eb44ffb92f59667bcca4310b3a Mon Sep 17 00:00:00 2001 From: abacus_fixer Date: Sat, 1 Aug 2026 22:05:06 +0800 Subject: [PATCH] reformat the MD output energy, potential, T, P, etc. --- source/source_io/module_json/init_info.cpp | 22 ++++++++++ .../module_json/test/para_json_test.cpp | 19 ++++++++ source/source_md/md_base.cpp | 44 ++++++++++--------- source/source_md/test/fire_test.cpp | 22 ++++++---- source/source_md/test/langevin_test.cpp | 20 ++++++--- source/source_md/test/msst_test.cpp | 20 ++++++--- source/source_md/test/nhchain_test.cpp | 20 ++++++--- source/source_md/test/verlet_test.cpp | 20 ++++++--- 8 files changed, 131 insertions(+), 56 deletions(-) diff --git a/source/source_io/module_json/init_info.cpp b/source/source_io/module_json/init_info.cpp index 647df761bb..46847e48a1 100644 --- a/source/source_io/module_json/init_info.cpp +++ b/source/source_io/module_json/init_info.cpp @@ -44,6 +44,28 @@ void gen_init(UnitCell* ucell) AbacusJson::add_json({"init", "nelectron"}, nelec_total, false); // Json::AbacusJson::add_Json(nelec_total,false,"init", "nelectron"); + + // energy cutoff for wavefunctions (Ry) + AbacusJson::add_json({"init", "ecutwfc"}, PARAM.inp.ecutwfc, false); + AbacusJson::add_json({"init", "ecutwfc_unit"}, "Ry", false); + + // smearing method and sigma (Ry) + AbacusJson::add_json({"init", "smearing_method"}, PARAM.inp.smearing_method, false); + AbacusJson::add_json({"init", "smearing_sigma"}, PARAM.inp.smearing_sigma, false); + AbacusJson::add_json({"init", "smearing_sigma_unit"}, "Ry", false); + + // k-point mesh generation parameters + AbacusJson::add_json({"init", "kmesh_type"}, PARAM.inp.kmesh_type, false); + Json::jsonValue kspacing_array(JarrayType); + kspacing_array.JPushBack(PARAM.inp.kspacing[0]); + kspacing_array.JPushBack(PARAM.inp.kspacing[1]); + kspacing_array.JPushBack(PARAM.inp.kspacing[2]); + AbacusJson::add_json({"init", "kspacing"}, kspacing_array, false); + Json::jsonValue koffset_array(JarrayType); + koffset_array.JPushBack(PARAM.inp.koffset[0]); + koffset_array.JPushBack(PARAM.inp.koffset[1]); + koffset_array.JPushBack(PARAM.inp.koffset[2]); + AbacusJson::add_json({"init", "koffset"}, koffset_array, false); } void add_nkstot(int nkstot) diff --git a/source/source_io/module_json/test/para_json_test.cpp b/source/source_io/module_json/test/para_json_test.cpp index 1c1012b56f..16d552e6ea 100644 --- a/source/source_io/module_json/test/para_json_test.cpp +++ b/source/source_io/module_json/test/para_json_test.cpp @@ -257,6 +257,12 @@ TEST(AbacusJsonTest, InitInfo) ucell.atoms = atomlist; ucell.ntype = 3; PARAM.input.nbands = 10; + PARAM.input.ecutwfc = 50.0; + PARAM.input.smearing_method = "gauss"; + PARAM.input.smearing_sigma = 0.015; + PARAM.input.kspacing = {0.04, 0.04, 0.04}; + PARAM.input.koffset = {0.0, 0.0, 0.0}; + PARAM.input.kmesh_type = "gamma"; ucell.atoms[0].label = "Si"; ucell.atoms[0].ncpp.zv = 3; @@ -295,6 +301,19 @@ TEST(AbacusJsonTest, InitInfo) ASSERT_EQ(Json::AbacusJson::doc["init"]["natom_each_type"]["Si"].GetInt(), 1); ASSERT_EQ(Json::AbacusJson::doc["init"]["natom_each_type"]["C"].GetInt(), 2); ASSERT_EQ(Json::AbacusJson::doc["init"]["natom_each_type"]["O"].GetInt(), 3); + + ASSERT_EQ(Json::AbacusJson::doc["init"]["ecutwfc"].GetDouble(), 50.0); + ASSERT_STREQ(Json::AbacusJson::doc["init"]["ecutwfc_unit"].GetString(), "Ry"); + ASSERT_STREQ(Json::AbacusJson::doc["init"]["smearing_method"].GetString(), "gauss"); + ASSERT_EQ(Json::AbacusJson::doc["init"]["smearing_sigma"].GetDouble(), 0.015); + ASSERT_STREQ(Json::AbacusJson::doc["init"]["smearing_sigma_unit"].GetString(), "Ry"); + ASSERT_STREQ(Json::AbacusJson::doc["init"]["kmesh_type"].GetString(), "gamma"); + ASSERT_EQ(Json::AbacusJson::doc["init"]["kspacing"][0].GetDouble(), 0.04); + ASSERT_EQ(Json::AbacusJson::doc["init"]["kspacing"][1].GetDouble(), 0.04); + ASSERT_EQ(Json::AbacusJson::doc["init"]["kspacing"][2].GetDouble(), 0.04); + ASSERT_EQ(Json::AbacusJson::doc["init"]["koffset"][0].GetDouble(), 0.0); + ASSERT_EQ(Json::AbacusJson::doc["init"]["koffset"][1].GetDouble(), 0.0); + ASSERT_EQ(Json::AbacusJson::doc["init"]["koffset"][2].GetDouble(), 0.0); } TEST(AbacusJsonTest, Init_stru_test) diff --git a/source/source_md/md_base.cpp b/source/source_md/md_base.cpp index 390e1c2b08..5c78e775d3 100644 --- a/source/source_md/md_base.cpp +++ b/source/source_md/md_base.cpp @@ -165,34 +165,36 @@ void MD_base::print_md(std::ofstream& ofs, const bool& cal_stress) } // screen output - std::cout << std::setprecision(8); - std::cout << " ------------------------------------------------------------------------------------------------" + std::cout << " -------------------------------------------------------------------------" << std::endl; - std::cout << " " << std::left << std::setw(20) << "Energy (Ry)" << std::left << std::setw(20) << "Potential (Ry)" - << std::left << std::setw(20) << "Kinetic (Ry)" << std::left << std::setw(20) << "Temperature (K)"; + std::cout << " " << std::left << std::setw(24) << "Energy (Ry)" << std::left << std::setw(24) << "Potential (Ry)" + << std::left << std::setw(24) << "Kinetic (Ry)" << std::endl; + std::cout << std::setprecision(12); + std::cout << " " << std::left << std::setw(24) << 2 * (potential + kinetic) << std::left << std::setw(24) + << 2 * potential << std::left << std::setw(24) << 2 * kinetic << std::endl; + std::cout << " " << std::left << std::setw(24) << "Temperature (K)"; if (cal_stress) { - std::cout << std::left << std::setw(20) << "Pressure (kbar)"; + std::cout << std::left << std::setw(24) << "Pressure (kbar)"; } std::cout << std::endl; - std::cout << " " << std::left << std::setw(20) << 2 * (potential + kinetic) << std::left << std::setw(20) - << 2 * potential << std::left << std::setw(20) << 2 * kinetic << std::left << std::setw(20) - << t_current * ModuleBase::Hartree_to_K; + std::cout << std::setprecision(6); + std::cout << " " << std::left << std::setw(24) << t_current * ModuleBase::Hartree_to_K; if (cal_stress) { - std::cout << std::left << std::setw(20) << press * unit_transform; + std::cout << std::left << std::setw(24) << press * unit_transform; } std::cout << std::endl; - std::cout << " ------------------------------------------------------------------------------------------------" + std::cout << " -------------------------------------------------------------------------" << std::endl; // running_log output ofs.unsetf(std::ios::fixed); - ofs << std::setprecision(8); + ofs << std::setprecision(12); if (cal_stress) { @@ -200,28 +202,30 @@ void MD_base::print_md(std::ofstream& ofs, const bool& cal_stress) ofs << std::endl; } - ofs << " ------------------------------------------------------------------------------------------------" + ofs << " -------------------------------------------------------------------------" << std::endl; - ofs << " " << std::left << std::setw(20) << "Energy (Ry)" << std::left << std::setw(20) << "Potential (Ry)" - << std::left << std::setw(20) << "Kinetic (Ry)" << std::left << std::setw(20) << "Temperature (K)"; + ofs << " " << std::left << std::setw(24) << "Energy (Ry)" << std::left << std::setw(24) << "Potential (Ry)" + << std::left << std::setw(24) << "Kinetic (Ry)" << std::endl; + ofs << " " << std::left << std::setw(24) << 2 * (potential + kinetic) << std::left << std::setw(24) << 2 * potential + << std::left << std::setw(24) << 2 * kinetic << std::endl; + ofs << " " << std::left << std::setw(24) << "Temperature (K)"; if (cal_stress) { - ofs << std::left << std::setw(20) << "Pressure (kbar)"; + ofs << std::left << std::setw(24) << "Pressure (kbar)"; } ofs << std::endl; - ofs << " " << std::left << std::setw(20) << 2 * (potential + kinetic) << std::left << std::setw(20) << 2 * potential - << std::left << std::setw(20) << 2 * kinetic << std::left << std::setw(20) - << t_current * ModuleBase::Hartree_to_K; + ofs << std::setprecision(6); + ofs << " " << std::left << std::setw(24) << t_current * ModuleBase::Hartree_to_K; if (cal_stress) { - ofs << std::left << std::setw(20) << press * unit_transform; + ofs << std::left << std::setw(24) << press * unit_transform; } ofs << std::endl; - ofs << " ------------------------------------------------------------------------------------------------" + ofs << " -------------------------------------------------------------------------" << std::endl; ofs << std::endl; return; diff --git a/source/source_md/test/fire_test.cpp b/source/source_md/test/fire_test.cpp index 3b294da46a..03f31539ea 100644 --- a/source/source_md/test/fire_test.cpp +++ b/source/source_md/test/fire_test.cpp @@ -185,32 +185,38 @@ TEST_F(FIREtest, PrintMD) std::string output_str; getline(ifs, output_str); - EXPECT_THAT(output_str, testing::HasSubstr(" ELECTRONIC PART OF STRESS: 0.24609992 kbar")); + EXPECT_THAT(output_str, testing::HasSubstr(" ELECTRONIC PART OF STRESS: 0.24609992")); getline(ifs, output_str); - EXPECT_THAT(output_str, testing::HasSubstr(" IONIC (KINETIC) PART OF STRESS: 0.83853919 kbar")); + EXPECT_THAT(output_str, testing::HasSubstr(" IONIC (KINETIC) PART OF STRESS: 0.83853919")); getline(ifs, output_str); - EXPECT_THAT(output_str, testing::HasSubstr(" MD PRESSURE (ELECTRONS+IONS) : 1.0846391 kbar")); + EXPECT_THAT(output_str, testing::HasSubstr(" MD PRESSURE (ELECTRONS+IONS) : 1.0846391")); getline(ifs, output_str); getline(ifs, output_str); EXPECT_THAT(output_str, testing::HasSubstr( - " ------------------------------------------------------------------------------------------------")); + " ----------------------------------------")); getline(ifs, output_str); EXPECT_THAT(output_str, testing::HasSubstr( - " Energy (Ry) Potential (Ry) Kinetic (Ry) Temperature (K) Pressure (kbar) ")); + " Energy (Ry) Potential (Ry) Kinetic (Ry) ")); + getline(ifs, output_str); + EXPECT_THAT(output_str, testing::HasSubstr("-0.015365236")); + EXPECT_THAT(output_str, testing::HasSubstr("-0.023915637")); + EXPECT_THAT(output_str, testing::HasSubstr("0.0085504016")); getline(ifs, output_str); EXPECT_THAT(output_str, testing::HasSubstr( - " -0.015365236 -0.023915637 0.0085504016 300 1.0846391 ")); + " Temperature (K) Pressure (kbar) ")); + getline(ifs, output_str); + EXPECT_THAT(output_str, testing::HasSubstr("1.08464")); getline(ifs, output_str); EXPECT_THAT( output_str, testing::HasSubstr( - " ------------------------------------------------------------------------------------------------")); + " ----------------------------------------")); getline(ifs, output_str); getline(ifs, output_str); - EXPECT_THAT(output_str, testing::HasSubstr(" LARGEST FORCE (eV/A) : 0.049479926")); + EXPECT_THAT(output_str, testing::HasSubstr(" LARGEST FORCE (eV/A) : 0.0494799")); ifs.close(); //remove("running_fire.log"); diff --git a/source/source_md/test/langevin_test.cpp b/source/source_md/test/langevin_test.cpp index 69df605b15..1be9040acc 100644 --- a/source/source_md/test/langevin_test.cpp +++ b/source/source_md/test/langevin_test.cpp @@ -170,32 +170,38 @@ TEST_F(Langevin_test, print_md) std::ifstream ifs("running_langevin.log"); std::string output_str; getline(ifs, output_str); - EXPECT_THAT(output_str, testing::HasSubstr(" ELECTRONIC PART OF STRESS: 0.24609992 kbar")); + EXPECT_THAT(output_str, testing::HasSubstr(" ELECTRONIC PART OF STRESS: 0.24609992")); getline(ifs, output_str); - EXPECT_THAT(output_str, testing::HasSubstr(" IONIC (KINETIC) PART OF STRESS: 0.83853919 kbar")); + EXPECT_THAT(output_str, testing::HasSubstr(" IONIC (KINETIC) PART OF STRESS: 0.83853919")); getline(ifs, output_str); - EXPECT_THAT(output_str, testing::HasSubstr(" MD PRESSURE (ELECTRONS+IONS) : 1.0846391 kbar")); + EXPECT_THAT(output_str, testing::HasSubstr(" MD PRESSURE (ELECTRONS+IONS) : 1.0846391")); getline(ifs, output_str); getline(ifs, output_str); EXPECT_THAT( output_str, testing::HasSubstr( - " ------------------------------------------------------------------------------------------------")); + " ----------------------------------------")); getline(ifs, output_str); EXPECT_THAT( output_str, testing::HasSubstr( - " Energy (Ry) Potential (Ry) Kinetic (Ry) Temperature (K) Pressure (kbar) ")); + " Energy (Ry) Potential (Ry) Kinetic (Ry) ")); + getline(ifs, output_str); + EXPECT_THAT(output_str, testing::HasSubstr("-0.015365236")); + EXPECT_THAT(output_str, testing::HasSubstr("-0.023915637")); + EXPECT_THAT(output_str, testing::HasSubstr("0.0085504016")); getline(ifs, output_str); EXPECT_THAT( output_str, testing::HasSubstr( - " -0.015365236 -0.023915637 0.0085504016 300 1.0846391 ")); + " Temperature (K) Pressure (kbar) ")); + getline(ifs, output_str); + EXPECT_THAT(output_str, testing::HasSubstr("1.08464")); getline(ifs, output_str); EXPECT_THAT( output_str, testing::HasSubstr( - " ------------------------------------------------------------------------------------------------")); + " ----------------------------------------")); ifs.close(); remove("running_langevin.log"); } diff --git a/source/source_md/test/msst_test.cpp b/source/source_md/test/msst_test.cpp index 7d0fd8054d..655672d2ef 100644 --- a/source/source_md/test/msst_test.cpp +++ b/source/source_md/test/msst_test.cpp @@ -226,32 +226,38 @@ TEST_F(MSST_test, print_md) std::ifstream ifs("running_msst.log"); std::string output_str; getline(ifs, output_str); - EXPECT_THAT(output_str, testing::HasSubstr(" ELECTRONIC PART OF STRESS: 0.24609992 kbar")); + EXPECT_THAT(output_str, testing::HasSubstr(" ELECTRONIC PART OF STRESS: 0.24609992")); getline(ifs, output_str); - EXPECT_THAT(output_str, testing::HasSubstr(" IONIC (KINETIC) PART OF STRESS: 0.8301538 kbar")); // result different from other MD methods + EXPECT_THAT(output_str, testing::HasSubstr(" IONIC (KINETIC) PART OF STRESS: 0.8301538")); // result different from other MD methods getline(ifs, output_str); - EXPECT_THAT(output_str, testing::HasSubstr(" MD PRESSURE (ELECTRONS+IONS) : 1.0762537 kbar")); // result different from other MD methods + EXPECT_THAT(output_str, testing::HasSubstr(" MD PRESSURE (ELECTRONS+IONS) : 1.0762537")); // result different from other MD methods getline(ifs, output_str); getline(ifs, output_str); EXPECT_THAT( output_str, testing::HasSubstr( - " ------------------------------------------------------------------------------------------------")); + " ----------------------------------------")); getline(ifs, output_str); EXPECT_THAT( output_str, testing::HasSubstr( - " Energy (Ry) Potential (Ry) Kinetic (Ry) Temperature (K) Pressure (kbar) ")); + " Energy (Ry) Potential (Ry) Kinetic (Ry) ")); + getline(ifs, output_str); + EXPECT_THAT(output_str, testing::HasSubstr("-0.01545074")); + EXPECT_THAT(output_str, testing::HasSubstr("-0.023915637")); + EXPECT_THAT(output_str, testing::HasSubstr("0.0084648976")); getline(ifs, output_str); EXPECT_THAT( output_str, testing::HasSubstr( - " -0.01545074 -0.023915637 0.0084648976 297 1.0762537 ")); + " Temperature (K) Pressure (kbar) ")); + getline(ifs, output_str); + EXPECT_THAT(output_str, testing::HasSubstr("1.07625")); getline(ifs, output_str); EXPECT_THAT( output_str, testing::HasSubstr( - " ------------------------------------------------------------------------------------------------")); + " ----------------------------------------")); ifs.close(); // remove("running_msst.log"); } diff --git a/source/source_md/test/nhchain_test.cpp b/source/source_md/test/nhchain_test.cpp index 647df0a730..6e22887222 100644 --- a/source/source_md/test/nhchain_test.cpp +++ b/source/source_md/test/nhchain_test.cpp @@ -216,32 +216,38 @@ TEST_F(NHC_test, print_md) std::ifstream ifs("running_nhchain.log"); std::string output_str; getline(ifs, output_str); - EXPECT_THAT(output_str, testing::HasSubstr(" ELECTRONIC PART OF STRESS: 0.24609992 kbar")); + EXPECT_THAT(output_str, testing::HasSubstr(" ELECTRONIC PART OF STRESS: 0.24609992")); getline(ifs, output_str); - EXPECT_THAT(output_str, testing::HasSubstr(" IONIC (KINETIC) PART OF STRESS: 0.83853919 kbar")); + EXPECT_THAT(output_str, testing::HasSubstr(" IONIC (KINETIC) PART OF STRESS: 0.83853919")); getline(ifs, output_str); - EXPECT_THAT(output_str, testing::HasSubstr(" MD PRESSURE (ELECTRONS+IONS) : 1.0846391 kbar")); + EXPECT_THAT(output_str, testing::HasSubstr(" MD PRESSURE (ELECTRONS+IONS) : 1.0846391")); getline(ifs, output_str); getline(ifs, output_str); EXPECT_THAT( output_str, testing::HasSubstr( - " ------------------------------------------------------------------------------------------------")); + " ----------------------------------------")); getline(ifs, output_str); EXPECT_THAT( output_str, testing::HasSubstr( - " Energy (Ry) Potential (Ry) Kinetic (Ry) Temperature (K) Pressure (kbar) ")); + " Energy (Ry) Potential (Ry) Kinetic (Ry) ")); + getline(ifs, output_str); + EXPECT_THAT(output_str, testing::HasSubstr("-0.015365236")); + EXPECT_THAT(output_str, testing::HasSubstr("-0.023915637")); + EXPECT_THAT(output_str, testing::HasSubstr("0.0085504016")); getline(ifs, output_str); EXPECT_THAT( output_str, testing::HasSubstr( - " -0.015365236 -0.023915637 0.0085504016 300 1.0846391 ")); + " Temperature (K) Pressure (kbar) ")); + getline(ifs, output_str); + EXPECT_THAT(output_str, testing::HasSubstr("1.08464")); getline(ifs, output_str); EXPECT_THAT( output_str, testing::HasSubstr( - " ------------------------------------------------------------------------------------------------")); + " ----------------------------------------")); ifs.close(); //remove("running_nhchain.log"); } diff --git a/source/source_md/test/verlet_test.cpp b/source/source_md/test/verlet_test.cpp index a13af044ad..96acb7fd24 100644 --- a/source/source_md/test/verlet_test.cpp +++ b/source/source_md/test/verlet_test.cpp @@ -333,32 +333,38 @@ TEST_F(Verlet_test, print_md) std::ifstream ifs("running_verlet.log"); std::string output_str; getline(ifs, output_str); - EXPECT_THAT(output_str, testing::HasSubstr(" ELECTRONIC PART OF STRESS: 0.24609992 kbar")); + EXPECT_THAT(output_str, testing::HasSubstr(" ELECTRONIC PART OF STRESS: 0.24609992")); getline(ifs, output_str); - EXPECT_THAT(output_str, testing::HasSubstr(" IONIC (KINETIC) PART OF STRESS: 0.83853919 kbar")); + EXPECT_THAT(output_str, testing::HasSubstr(" IONIC (KINETIC) PART OF STRESS: 0.83853919")); getline(ifs, output_str); - EXPECT_THAT(output_str, testing::HasSubstr(" MD PRESSURE (ELECTRONS+IONS) : 1.0846391 kbar")); + EXPECT_THAT(output_str, testing::HasSubstr(" MD PRESSURE (ELECTRONS+IONS) : 1.0846391")); getline(ifs, output_str); getline(ifs, output_str); EXPECT_THAT( output_str, testing::HasSubstr( - " ------------------------------------------------------------------------------------------------")); + " ----------------------------------------")); getline(ifs, output_str); EXPECT_THAT( output_str, testing::HasSubstr( - " Energy (Ry) Potential (Ry) Kinetic (Ry) Temperature (K) Pressure (kbar) ")); + " Energy (Ry) Potential (Ry) Kinetic (Ry) ")); + getline(ifs, output_str); + EXPECT_THAT(output_str, testing::HasSubstr("-0.015365236")); + EXPECT_THAT(output_str, testing::HasSubstr("-0.023915637")); + EXPECT_THAT(output_str, testing::HasSubstr("0.0085504016")); getline(ifs, output_str); EXPECT_THAT( output_str, testing::HasSubstr( - " -0.015365236 -0.023915637 0.0085504016 300 1.0846391 ")); + " Temperature (K) Pressure (kbar) ")); + getline(ifs, output_str); + EXPECT_THAT(output_str, testing::HasSubstr("1.08464")); getline(ifs, output_str); EXPECT_THAT( output_str, testing::HasSubstr( - " ------------------------------------------------------------------------------------------------")); + " ----------------------------------------")); ifs.close(); // remove("running_verlet.log"); }