diff --git a/source/module_esolver/esolver_ks_lcao.cpp b/source/module_esolver/esolver_ks_lcao.cpp index 580d5a91ca..6341a2b6b8 100644 --- a/source/module_esolver/esolver_ks_lcao.cpp +++ b/source/module_esolver/esolver_ks_lcao.cpp @@ -1106,7 +1106,8 @@ void ESolver_KS_LCAO::after_scf(const int istep) // ModuleRPA::DFT_RPA_interface rpa_interface(GlobalC::exx_info.info_global); // rpa_interface.rpa_exx_lcao().info.files_abfs = GlobalV::rpa_orbitals; RPA_LRI rpa_lri_double(GlobalC::exx_info.info_ri, GlobalC::exx_info.info_ewald); - rpa_lri_double.cal_postSCF_exx(*dynamic_cast*>(this->pelec)->get_DM(), + rpa_lri_double.cal_postSCF_exx(istep, + *dynamic_cast*>(this->pelec)->get_DM(), MPI_COMM_WORLD, this->kv, orb_); diff --git a/source/module_hamilt_general/module_xc/exx_info.h b/source/module_hamilt_general/module_xc/exx_info.h index 013dc04db3..acd4f28860 100644 --- a/source/module_hamilt_general/module_xc/exx_info.h +++ b/source/module_hamilt_general/module_xc/exx_info.h @@ -14,8 +14,7 @@ struct Exx_Info Conv_Coulomb_Pot_K::Ccp_Type ccp_type; double hybrid_alpha = 0.25; - double cam_alpha = 0.0; - double cam_beta = 0.0; + double hybrid_beta = 0.0; double hse_omega = 0.11; double mixing_beta_for_loop1 = 1.0; @@ -43,8 +42,6 @@ struct Exx_Info Singular_Value::Fq_type fq_type; const bool& use_ewald; - double ewald_qdiv = 2; - Exx_Info_Ewald(const Exx_Info::Exx_Info_Global& info_global) : use_ewald(info_global.use_ewald) { } @@ -55,10 +52,11 @@ struct Exx_Info { const Conv_Coulomb_Pot_K::Ccp_Type& ccp_type; const double& hse_omega; - const double& cam_alpha; - const double& cam_beta; + const double& hybrid_alpha; + const double& hybrid_beta; bool real_number = false; + int Rcut_type = 1; double pca_threshold = 0; std::vector files_abfs; @@ -78,8 +76,8 @@ struct Exx_Info int abfs_Lmax = 0; // tmp Exx_Info_RI(const Exx_Info::Exx_Info_Global& info_global) - : ccp_type(info_global.ccp_type), hse_omega(info_global.hse_omega), cam_alpha(info_global.cam_alpha), - cam_beta(info_global.cam_beta) + : ccp_type(info_global.ccp_type), hse_omega(info_global.hse_omega), hybrid_alpha(info_global.hybrid_alpha), + hybrid_beta(info_global.hybrid_beta) { } }; diff --git a/source/module_hamilt_general/module_xc/xc_functional.cpp b/source/module_hamilt_general/module_xc/xc_functional.cpp index e63845e3ff..3074884a93 100644 --- a/source/module_hamilt_general/module_xc/xc_functional.cpp +++ b/source/module_hamilt_general/module_xc/xc_functional.cpp @@ -18,14 +18,12 @@ std::vector XC_Functional::func_id(1); int XC_Functional::func_type = 0; bool XC_Functional::use_libxc = true; double XC_Functional::hybrid_alpha = 0.25; -double XC_Functional::cam_alpha = 0.0; -double XC_Functional::cam_beta = 0.0; +double XC_Functional::hybrid_beta = 0.0; -void XC_Functional::set_hybrid_alpha(const double alpha_in, const double cam_alpha_in, const double cam_beta_in) +void XC_Functional::set_hybrid_alpha(const double alpha_in, const double beta_in) { hybrid_alpha = alpha_in; - cam_alpha = cam_alpha_in; - cam_beta = cam_beta_in; + hybrid_beta = beta_in; } double XC_Functional::get_hybrid_alpha() diff --git a/source/module_hamilt_general/module_xc/xc_functional.h b/source/module_hamilt_general/module_xc/xc_functional.h index 72f65d7a7d..02cb8a4c0c 100644 --- a/source/module_hamilt_general/module_xc/xc_functional.h +++ b/source/module_hamilt_general/module_xc/xc_functional.h @@ -66,7 +66,7 @@ class XC_Functional static void set_xc_type(const std::string xc_func_in); // For hybrid functional - static void set_hybrid_alpha(const double alpha_in, const double cam_alpha_in, const double cam_beta_in); + static void set_hybrid_alpha(const double alpha_in, const double beta_in); static double get_hybrid_alpha(); /// Usually in exx caculation, the first SCF loop should be converged with PBE static void set_xc_first_loop(const UnitCell& ucell); @@ -79,8 +79,7 @@ class XC_Functional //exx_hybrid_alpha for mixing exx in hybrid functional: static double hybrid_alpha; - static double cam_alpha; - static double cam_beta; + static double hybrid_beta; public: static std::vector get_func_id() { return func_id; } diff --git a/source/module_hamilt_general/module_xc/xc_functional_libxc.cpp b/source/module_hamilt_general/module_xc/xc_functional_libxc.cpp index bf15abbb9e..7fabf187cc 100644 --- a/source/module_hamilt_general/module_xc/xc_functional_libxc.cpp +++ b/source/module_hamilt_general/module_xc/xc_functional_libxc.cpp @@ -157,8 +157,8 @@ std::vector XC_Functional_Libxc::init_func(const std::vector // and 0.0% short-range and 100.0% long-range exact exchange, // using the error function kernel. add_func( XC_HYB_GGA_XC_LC_WPBE ); - double parameter_hse[3] = { GlobalC::exx_info.info_global.cam_alpha, //Fraction of Hartree-Fock exchange: 1.0 - GlobalC::exx_info.info_global.cam_beta, //Fraction of short-range exact exchange: -1.0 + double parameter_hse[3] = { GlobalC::exx_info.info_global.hybrid_alpha, //Fraction of Hartree-Fock exchange: 1.0 + GlobalC::exx_info.info_global.hybrid_beta, //Fraction of short-range exact exchange: -1.0 GlobalC::exx_info.info_global.hse_omega }; //Range separation constant: 0.4 xc_func_set_ext_params(&funcs.back(), parameter_hse); } @@ -168,8 +168,8 @@ std::vector XC_Functional_Libxc::init_func(const std::vector // and 0.0% short-range and 100.0% long-range exact exchange, // using the error function kernel. add_func( XC_HYB_GGA_XC_LRC_WPBE ); - double parameter_hse[3] = { GlobalC::exx_info.info_global.cam_alpha, //Fraction of Hartree-Fock exchange: 1.0 - GlobalC::exx_info.info_global.cam_beta, //Fraction of short-range exact exchange: -1.0 + double parameter_hse[3] = { GlobalC::exx_info.info_global.hybrid_alpha, //Fraction of Hartree-Fock exchange: 1.0 + GlobalC::exx_info.info_global.hybrid_beta, //Fraction of short-range exact exchange: -1.0 GlobalC::exx_info.info_global.hse_omega }; //Range separation constant: 0.3 xc_func_set_ext_params(&funcs.back(), parameter_hse); } @@ -179,8 +179,8 @@ std::vector XC_Functional_Libxc::init_func(const std::vector // and 20.0% short-range and 100.0% long-range exact exchange, // using the error function kernel. add_func( XC_HYB_GGA_XC_LRC_WPBEH ); - double parameter_hse[3] = { GlobalC::exx_info.info_global.cam_alpha, //Fraction of Hartree-Fock exchange: 1.0 - GlobalC::exx_info.info_global.cam_beta, //Fraction of short-range exact exchange: -0.8 + double parameter_hse[3] = { GlobalC::exx_info.info_global.hybrid_alpha, //Fraction of Hartree-Fock exchange: 1.0 + GlobalC::exx_info.info_global.hybrid_beta, //Fraction of short-range exact exchange: -0.8 GlobalC::exx_info.info_global.hse_omega }; //Range separation constant: 0.2 xc_func_set_ext_params(&funcs.back(), parameter_hse); } @@ -190,8 +190,8 @@ std::vector XC_Functional_Libxc::init_func(const std::vector // and 100.0% short-range and 20.0% long-range exact exchange, // using the error function kernel. add_func( XC_HYB_GGA_XC_CAM_PBEH); - double parameter_hse[3] = { GlobalC::exx_info.info_global.cam_alpha, //Fraction of Hartree-Fock exchange: 0.2 - GlobalC::exx_info.info_global.cam_beta, //Fraction of short-range exact exchange: 0.8 + double parameter_hse[3] = { GlobalC::exx_info.info_global.hybrid_alpha, //Fraction of Hartree-Fock exchange: 0.2 + GlobalC::exx_info.info_global.hybrid_beta, //Fraction of short-range exact exchange: 0.8 GlobalC::exx_info.info_global.hse_omega }; //Range separation constant: 0.7 xc_func_set_ext_params(&funcs.back(), parameter_hse); } diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.cpp index de2c8fc9f9..ca19bfb630 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.cpp @@ -353,7 +353,7 @@ HamiltLCAO::HamiltLCAO(Gint_Gamma* GG_in, &GlobalC::GridD); this->getOperator()->add(td_nonlocal); } - if ((elecstate::H_TDDFT_pw::stype == 2)) + if (elecstate::H_TDDFT_pw::stype == 2) { Operator* td_pot_mixing = new TD_mixing_pot>(this->hsk, this->kv->kvec_d, diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_exx_lcao.hpp b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_exx_lcao.hpp index d72ada24c7..0288149557 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_exx_lcao.hpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_exx_lcao.hpp @@ -242,7 +242,7 @@ void OperatorEXX>::contributeHR() template void OperatorEXX>::contributeHk(int ik) { - ModuleBase::TITLE("OperatorEXX", "constributeHR"); + ModuleBase::TITLE("OperatorEXX", "constributeHk"); // Peize Lin add 2016-12-03 if (PARAM.inp.calculation != "nscf" && this->two_level_step != nullptr && *this->two_level_step == 0 && !this->restart) { return; } //in the non-exx loop, do nothing diff --git a/source/module_io/input_conv.cpp b/source/module_io/input_conv.cpp index fb420195fb..1692f6c009 100644 --- a/source/module_io/input_conv.cpp +++ b/source/module_io/input_conv.cpp @@ -367,8 +367,6 @@ void Input_Conv::Convert() GlobalC::exx_info.info_global.cal_exx = true; if (PARAM.inp.exx_use_ewald) { - GlobalC::exx_info.info_global.cam_alpha = std::stod(PARAM.inp.exx_cam_alpha); - GlobalC::exx_info.info_global.cam_beta = std::stod(PARAM.inp.exx_cam_beta); GlobalC::exx_info.info_global.use_ewald = true; GlobalC::exx_info.info_ewald.fq_type = Singular_Value::Fq_type(PARAM.inp.exx_fq_type); GlobalC::exx_info.info_global.ccp_type = Conv_Coulomb_Pot_K::Ccp_Type::Ccp; @@ -392,8 +390,6 @@ void Input_Conv::Convert() || dft_functional_lower == "cam_pbeh") { GlobalC::exx_info.info_global.cal_exx = true; - GlobalC::exx_info.info_global.cam_alpha = std::stod(PARAM.inp.exx_cam_alpha); - GlobalC::exx_info.info_global.cam_beta = std::stod(PARAM.inp.exx_cam_beta); if (PARAM.inp.exx_use_ewald) { GlobalC::exx_info.info_global.use_ewald = true; @@ -413,15 +409,16 @@ void Input_Conv::Convert() // EXX case, convert all EXX related variables // GlobalC::exx_info.info_global.cal_exx = true; GlobalC::exx_info.info_global.hybrid_alpha = std::stod(PARAM.inp.exx_hybrid_alpha); + GlobalC::exx_info.info_global.hybrid_beta = std::stod(PARAM.inp.exx_hybrid_beta); XC_Functional::set_hybrid_alpha(std::stod(PARAM.inp.exx_hybrid_alpha), - std::stod(PARAM.inp.exx_cam_alpha), - std::stod(PARAM.inp.exx_cam_beta)); + std::stod(PARAM.inp.exx_hybrid_beta)); GlobalC::exx_info.info_global.hse_omega = std::stod(PARAM.inp.exx_hse_omega); GlobalC::exx_info.info_global.separate_loop = PARAM.inp.exx_separate_loop; GlobalC::exx_info.info_global.hybrid_step = PARAM.inp.exx_hybrid_step; GlobalC::exx_info.info_global.mixing_beta_for_loop1 = PARAM.inp.exx_mixing_beta; GlobalC::exx_info.info_lip.lambda = PARAM.inp.exx_lambda; + GlobalC::exx_info.info_ri.Rcut_type = PARAM.inp.exx_spencer_type; GlobalC::exx_info.info_ri.real_number = std::stoi(PARAM.inp.exx_real_number); GlobalC::exx_info.info_ri.pca_threshold = PARAM.inp.exx_pca_threshold; GlobalC::exx_info.info_ri.C_threshold = PARAM.inp.exx_c_threshold; @@ -435,7 +432,6 @@ void Input_Conv::Convert() GlobalC::exx_info.info_ri.cauchy_force_threshold = PARAM.inp.exx_cauchy_force_threshold; GlobalC::exx_info.info_ri.cauchy_stress_threshold = PARAM.inp.exx_cauchy_stress_threshold; GlobalC::exx_info.info_ri.ccp_rmesh_times = std::stod(PARAM.inp.exx_ccp_rmesh_times); - GlobalC::exx_info.info_ewald.ewald_qdiv = PARAM.inp.exx_ewald_qdiv; Exx_Abfs::Jle::Lmax = PARAM.inp.exx_opt_orb_lmax; Exx_Abfs::Jle::Ecut_exx = PARAM.inp.exx_opt_orb_ecut; diff --git a/source/module_io/input_conv.h b/source/module_io/input_conv.h index d4a9bf4f71..5ce3ac4190 100644 --- a/source/module_io/input_conv.h +++ b/source/module_io/input_conv.h @@ -47,7 +47,7 @@ void parse_expression(const std::string& fn, std::vector& vec) { ModuleBase::TITLE("Input_Conv", "parse_expression"); int count = 0; - std::string pattern("([0-9]+\\*[0-9.]+|[0-9,.]+)"); + std::string pattern("([-+]?[0-9]+\\*[-+]?[0-9.]+|[-+]?[0-9,.]+)"); std::vector str; std::stringstream ss(fn); std::string section; @@ -103,6 +103,7 @@ void parse_expression(const std::string& fn, std::vector& vec) { int pos = sub_str.find("*"); int num = stoi(sub_str.substr(0, pos)); + assert(num>=0); T occ = stof(sub_str.substr(pos + 1, sub_str.size())); // std::vector ocp_temp(num, occ); // const std::vector::iterator dest = vec.begin() + count; diff --git a/source/module_io/read_input.cpp b/source/module_io/read_input.cpp index b7015424df..b653560ce3 100644 --- a/source/module_io/read_input.cpp +++ b/source/module_io/read_input.cpp @@ -398,7 +398,7 @@ void ReadInput::write_txt_input(const Parameter& param, const std::string& filen { ofs << "\n#Parameters (14.vdW Correction)" << std::endl; } - else if (p_item->label == "exx_hybrid_alpha" || p_item->label == "exx_use_ewald") + else if (p_item->label == "exx_hybrid_alpha") { ofs << "\n#Parameters (15.exx)" << std::endl; } diff --git a/source/module_io/read_input_item_exx_dftu.cpp b/source/module_io/read_input_item_exx_dftu.cpp index 283b16083d..d2e57fda53 100644 --- a/source/module_io/read_input_item_exx_dftu.cpp +++ b/source/module_io/read_input_item_exx_dftu.cpp @@ -17,7 +17,9 @@ void ReadInput::item_exx() std::string& dft_functional = para.input.dft_functional; std::string dft_functional_lower = dft_functional; std::transform(dft_functional.begin(), dft_functional.end(), dft_functional_lower.begin(), tolower); - if (dft_functional_lower == "hf") + if (dft_functional_lower == "hf" || + dft_functional_lower == "lc_pbe" || dft_functional_lower == "lc_wpbe" || + dft_functional_lower == "lrc_wpbe" || dft_functional_lower == "lrc_wpbeh") { para.input.exx_hybrid_alpha = "1"; } @@ -26,6 +28,10 @@ void ReadInput::item_exx() { para.input.exx_hybrid_alpha = "0.25"; } + else if (dft_functional_lower == "cam_pbeh") + { + para.input.exx_hybrid_alpha = "0.2"; + } else { // no exx in scf, but will change to non-zero in // postprocess like rpa @@ -48,12 +54,6 @@ void ReadInput::item_exx() read_sync_int(input.exx_fq_type); this->add_item(item); } - { - Input_Item item("exx_ewald_qdiv"); - item.annotation = "the order of q-divergence in auxiliary function"; - read_sync_double(input.exx_ewald_qdiv); - this->add_item(item); - } { Input_Item item("exx_use_ewald"); item.annotation = "if 1, use Ewald method to construct V matrix"; @@ -61,44 +61,17 @@ void ReadInput::item_exx() this->add_item(item); } { - Input_Item item("exx_cam_alpha"); - item.annotation = "fraction of the full-range parts of Fock exchange in range-separated hybrid funtionals"; - read_sync_string(input.exx_cam_alpha); - item.reset_value = [](const Input_Item& item, Parameter& para) { - if (para.input.exx_cam_alpha == "default") - { - std::string& dft_functional = para.input.dft_functional; - std::string dft_functional_lower = dft_functional; - std::transform(dft_functional.begin(), dft_functional.end(), dft_functional_lower.begin(), tolower); - if (dft_functional_lower == "hf" || - dft_functional_lower == "lc_pbe" || dft_functional_lower == "lc_wpbe" || - dft_functional_lower == "lrc_wpbe" || dft_functional_lower == "lrc_wpbeh") - { - para.input.exx_cam_alpha = "1"; - } - else if (dft_functional_lower == "cam_pbeh") - { - para.input.exx_cam_alpha = "0.2"; - } - else if (dft_functional_lower == "pbe0" - || dft_functional_lower == "scan0") - { - para.input.exx_cam_alpha = "0.25"; - } - else - { - para.input.exx_cam_alpha = "0"; - } - } - }; + Input_Item item("exx_spencer_type"); + item.annotation = "set Spencer scheme type"; + read_sync_int(input.exx_spencer_type); this->add_item(item); } - { - Input_Item item("exx_cam_beta"); - item.annotation = "fraction of the short-range parts of Fock exchange in range-separated hybrid funtionals"; - read_sync_string(input.exx_cam_beta); + { + Input_Item item("exx_hybrid_beta"); + item.annotation = "another fraction of Fock exchange in range-separated hybrid funtionals"; + read_sync_string(input.exx_hybrid_beta); item.reset_value = [](const Input_Item& item, Parameter& para) { - if (para.input.exx_cam_beta == "default") + if (para.input.exx_hybrid_beta == "default") { std::string& dft_functional = para.input.dft_functional; std::string dft_functional_lower = dft_functional; @@ -106,23 +79,23 @@ void ReadInput::item_exx() if (dft_functional_lower == "lc_pbe" || dft_functional_lower == "lc_wpbe" || dft_functional_lower == "lrc_wpbe") { - para.input.exx_cam_beta = "-1"; + para.input.exx_hybrid_beta = "-1"; } else if (dft_functional_lower == "lrc_wpbeh") { - para.input.exx_cam_beta = "-0.8"; + para.input.exx_hybrid_beta = "-0.8"; } else if (dft_functional_lower == "cam_pbeh") { - para.input.exx_cam_beta = "0.8"; + para.input.exx_hybrid_beta = "0.8"; } else if (dft_functional_lower == "hse") { - para.input.exx_cam_beta = "0.25"; + para.input.exx_hybrid_beta = "0.25"; } else { - para.input.exx_cam_beta = "0"; + para.input.exx_hybrid_beta = "0"; } } }; diff --git a/source/module_io/test/read_input_ptest.cpp b/source/module_io/test/read_input_ptest.cpp index c306bc06ca..457f827e56 100644 --- a/source/module_io/test/read_input_ptest.cpp +++ b/source/module_io/test/read_input_ptest.cpp @@ -266,9 +266,9 @@ TEST_F(InputParaTest, ParaRead) EXPECT_EQ(param.inp.vdw_cutoff_period[1], 3); EXPECT_EQ(param.inp.vdw_cutoff_period[2], 3); EXPECT_EQ(std::stod(param.inp.exx_hybrid_alpha), 0.25); - EXPECT_EQ(std::stod(param.inp.exx_cam_alpha), 0.0); - EXPECT_EQ(std::stod(param.inp.exx_cam_beta), 0.0); + EXPECT_EQ(std::stod(param.inp.exx_hybrid_beta), 0.0); EXPECT_EQ(param.inp.exx_use_ewald, 0); + EXPECT_EQ(param.inp.exx_spencer_type, 0); EXPECT_EQ(param.inp.exx_fq_type, 1); EXPECT_EQ(param.inp.exx_real_number, "1"); EXPECT_DOUBLE_EQ(param.inp.exx_hse_omega, 0.11); diff --git a/source/module_io/test/support/INPUT b/source/module_io/test/support/INPUT index 63b90b8a01..ec874d668f 100644 --- a/source/module_io/test/support/INPUT +++ b/source/module_io/test/support/INPUT @@ -273,11 +273,11 @@ vdw_cutoff_period 3 3 3 #periods of periodic structure #Parameters (14.exx) exx_hybrid_alpha default # -exx_cam_alpha default # -exx_cam_beta default # +exx_hybrid_beta default # exx_hse_omega default # exx_separate_loop 1 #0 or 1 exx_use_ewald 0 +exx_spencer_type 0 exx_fq_type 1 exx_hybrid_step 100 # exx_mixing_beta 1.0 # diff --git a/source/module_io/test_serial/read_input_item_test.cpp b/source/module_io/test_serial/read_input_item_test.cpp index d7c8955e59..db3b395488 100644 --- a/source/module_io/test_serial/read_input_item_test.cpp +++ b/source/module_io/test_serial/read_input_item_test.cpp @@ -1228,92 +1228,44 @@ TEST_F(InputTest, Item_test2) output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("NOTICE")); } - { // exx_cam_alpha - auto it = find_label("exx_cam_alpha", readinput.input_lists); - param.input.exx_cam_alpha = "default"; - param.input.dft_functional = "HF"; - it->second.reset_value(it->second, param); - EXPECT_EQ(param.input.exx_cam_alpha, "1"); - - param.input.exx_cam_alpha = "default"; - param.input.dft_functional = "PBE0"; - it->second.reset_value(it->second, param); - EXPECT_EQ(param.input.exx_cam_alpha, "0.25"); - - param.input.exx_cam_alpha = "default"; - param.input.dft_functional = "SCAN0"; - it->second.reset_value(it->second, param); - EXPECT_EQ(param.input.exx_cam_alpha, "0.25"); - - param.input.exx_cam_alpha = "default"; - param.input.dft_functional = "lc_pbe"; - it->second.reset_value(it->second, param); - EXPECT_EQ(param.input.exx_cam_alpha, "1"); - - param.input.exx_cam_alpha = "default"; - param.input.dft_functional = "lc_wpbe"; - it->second.reset_value(it->second, param); - EXPECT_EQ(param.input.exx_cam_alpha, "1"); - - param.input.exx_cam_alpha = "default"; - param.input.dft_functional = "lrc_wpbe"; - it->second.reset_value(it->second, param); - EXPECT_EQ(param.input.exx_cam_alpha, "1"); - - param.input.exx_cam_alpha = "default"; - param.input.dft_functional = "lrc_wpbeh"; - it->second.reset_value(it->second, param); - EXPECT_EQ(param.input.exx_cam_alpha, "1"); - - param.input.exx_cam_alpha = "default"; - param.input.dft_functional = "none"; - it->second.reset_value(it->second, param); - EXPECT_EQ(param.input.exx_cam_alpha, "0"); - - param.input.exx_cam_alpha = "-1"; - testing::internal::CaptureStdout(); - EXPECT_EXIT(it->second.check_value(it->second, param), ::testing::ExitedWithCode(0), ""); - output = testing::internal::GetCapturedStdout(); - EXPECT_THAT(output, testing::HasSubstr("NOTICE")); - } - { // exx_cam_beta - auto it = find_label("exx_cam_beta", readinput.input_lists); - param.input.exx_cam_beta = "default"; + { // exx_hybrid_beta + auto it = find_label("exx_hybrid_beta", readinput.input_lists); + param.input.exx_hybrid_beta = "default"; param.input.dft_functional = "lc_pbe"; it->second.reset_value(it->second, param); - EXPECT_EQ(param.input.exx_cam_beta, "-1"); + EXPECT_EQ(param.input.exx_hybrid_beta, "-1"); - param.input.exx_cam_beta = "default"; + param.input.exx_hybrid_beta = "default"; param.input.dft_functional = "lc_wpbe"; it->second.reset_value(it->second, param); - EXPECT_EQ(param.input.exx_cam_beta, "-1"); + EXPECT_EQ(param.input.exx_hybrid_beta, "-1"); - param.input.exx_cam_beta = "default"; + param.input.exx_hybrid_beta = "default"; param.input.dft_functional = "lrc_wpbe"; it->second.reset_value(it->second, param); - EXPECT_EQ(param.input.exx_cam_beta, "-1"); + EXPECT_EQ(param.input.exx_hybrid_beta, "-1"); - param.input.exx_cam_beta = "default"; + param.input.exx_hybrid_beta = "default"; param.input.dft_functional = "lrc_wpbeh"; it->second.reset_value(it->second, param); - EXPECT_EQ(param.input.exx_cam_beta, "-0.8"); + EXPECT_EQ(param.input.exx_hybrid_beta, "-0.8"); - param.input.exx_cam_beta = "default"; + param.input.exx_hybrid_beta = "default"; param.input.dft_functional = "cam_pbeh"; it->second.reset_value(it->second, param); - EXPECT_EQ(param.input.exx_cam_beta, "0.8"); + EXPECT_EQ(param.input.exx_hybrid_beta, "0.8"); - param.input.exx_cam_beta = "default"; + param.input.exx_hybrid_beta = "default"; param.input.dft_functional = "hse"; it->second.reset_value(it->second, param); - EXPECT_EQ(param.input.exx_cam_beta, "0.25"); + EXPECT_EQ(param.input.exx_hybrid_beta, "0.25"); - param.input.exx_cam_beta= "default"; + param.input.exx_hybrid_beta= "default"; param.input.dft_functional = "none"; it->second.reset_value(it->second, param); - EXPECT_EQ(param.input.exx_cam_beta, "0"); + EXPECT_EQ(param.input.exx_hybrid_beta, "0"); - param.input.exx_cam_beta = "-1"; + param.input.exx_hybrid_beta = "-1"; testing::internal::CaptureStdout(); EXPECT_EXIT(it->second.check_value(it->second, param), ::testing::ExitedWithCode(0), ""); output = testing::internal::GetCapturedStdout(); diff --git a/source/module_lr/esolver_lrtd_lcao.cpp b/source/module_lr/esolver_lrtd_lcao.cpp index 20f3a3a4bd..9da23d9adc 100644 --- a/source/module_lr/esolver_lrtd_lcao.cpp +++ b/source/module_lr/esolver_lrtd_lcao.cpp @@ -245,7 +245,7 @@ LR::ESolver_LR::ESolver_LR(ModuleESolver::ESolver_KS_LCAO&& ks_sol else if (xc_kernel == "hse") { exx_info.info_global.ccp_type = Conv_Coulomb_Pot_K::Ccp_Type::Hse; } this->exx_lri = std::make_shared>(exx_info.info_ri, exx_info.info_ewald); this->exx_lri->init(MPI_COMM_WORLD, this->kv, ks_sol.orb_); - this->exx_lri->cal_exx_ions(input.out_ri_cv); + this->exx_lri->cal_exx_ions(0, input.out_ri_cv); } } #endif @@ -420,7 +420,7 @@ LR::ESolver_LR::ESolver_LR(const Input_para& inp, UnitCell& ucell) : inpu else if (xc_kernel == "hse") { exx_info.info_global.ccp_type = Conv_Coulomb_Pot_K::Ccp_Type::Hse; } this->exx_lri = std::make_shared>(exx_info.info_ri, exx_info.info_ewald); this->exx_lri->init(MPI_COMM_WORLD, this->kv, orb); - this->exx_lri->cal_exx_ions(input.out_ri_cv); + this->exx_lri->cal_exx_ions(0, input.out_ri_cv); } // else #endif diff --git a/source/module_parameter/input_parameter.h b/source/module_parameter/input_parameter.h index 4cfb064fa0..01d78162c5 100644 --- a/source/module_parameter/input_parameter.h +++ b/source/module_parameter/input_parameter.h @@ -471,11 +471,10 @@ struct Input_para // ========================================================== std::string exx_hybrid_alpha = "default"; ///< fraction of Fock exchange in hybrid functionals std::string exx_hse_omega = "default"; ///< range-separation parameter in HSE/CAM/LR functional - std::string exx_cam_alpha = "default"; ///< range-separation parameter in CAM/LR functional - std::string exx_cam_beta = "default"; ///< range-separation parameter in CAM/LR functional + std::string exx_hybrid_beta = "default"; ///< range-separation parameter in CAM/LR functional bool exx_use_ewald = false; ///< if 1, Ewald method is used for HF or CAM/LR hybrid functions + int exx_spencer_type = 0; ///< set Spencer scheme type int exx_fq_type = 1; /// auxiliary-function fq used in correction to V(q) at q->0 - double exx_ewald_qdiv = 2; /// the order of q-divergence in auxiliary function bool exx_separate_loop = true; ///< if 1, a two-step method is employed, else it will start ///< with a GGA-Loop, and then Hybrid-Loop int exx_hybrid_step = 100; ///< the maximal electronic iteration number in diff --git a/source/module_ri/Exx_LRI.h b/source/module_ri/Exx_LRI.h index d849094f36..8f4e15199d 100644 --- a/source/module_ri/Exx_LRI.h +++ b/source/module_ri/Exx_LRI.h @@ -84,7 +84,7 @@ class Exx_LRI RI::Exx exx_lri; Ewald_Vq evq; - void cal_exx_ions(const bool write_cv = false); + void cal_exx_ions(const int istep, const bool write_cv = false); void cal_exx_elec(const std::vector>>>& Ds, const Parallel_Orbitals& pv, const ModuleSymmetry::Symmetry_rotation* p_symrot = nullptr); diff --git a/source/module_ri/Exx_LRI.hpp b/source/module_ri/Exx_LRI.hpp index 344bc267e0..a6252b7c4b 100644 --- a/source/module_ri/Exx_LRI.hpp +++ b/source/module_ri/Exx_LRI.hpp @@ -68,36 +68,50 @@ void Exx_LRI::init(const MPI_Comm &mpi_comm_in, const K_Vectors &kv_in, c Exx_Abfs::Construct_Orbs::print_orbs_size(this->abfs, GlobalV::ofs_running); auto get_ccp_parameter = [this]() -> std::map { + double hf_Rcut; + switch (this->info.Rcut_type) { + case 0: { + // 4/3 * pi * Rcut^3 = V_{supercell} = V_{unitcell} * Nk + const int nspin0 = (PARAM.inp.nspin == 2) ? 2 : 1; + hf_Rcut = std::pow(0.75 * this->p_kv->get_nkstot_full() / nspin0 + * GlobalC::ucell.omega / (ModuleBase::PI), + 1.0 / 3.0); + break; + } + case 1: { + double bvk_a1 = GlobalC::ucell.a1.norm() * this->p_kv->nmp[0]; + double bvk_a2 = GlobalC::ucell.a2.norm() * this->p_kv->nmp[1]; + double bvk_a3 = GlobalC::ucell.a3.norm() * this->p_kv->nmp[2]; + + double min_len = std::min({bvk_a1, bvk_a2, bvk_a3}); + hf_Rcut = 0.5 * min_len; + break; + } + default: + throw std::domain_error(std::string(__FILE__) + " line " + + std::to_string(__LINE__)); + break; + } + switch (this->info.ccp_type) { case Conv_Coulomb_Pot_K::Ccp_Type::Ccp: return {}; case Conv_Coulomb_Pot_K::Ccp_Type::Hf: { - // 4/3 * pi * Rcut^3 = V_{supercell} = V_{unitcell} * Nk - const int nspin0 = (PARAM.inp.nspin == 2) ? 2 : 1; - const double hf_Rcut - = std::pow(0.75 * this->p_kv->get_nkstot_full() / nspin0 - * GlobalC::ucell.omega / (ModuleBase::PI), - 1.0 / 3.0); - return {{"hf_Rcut", hf_Rcut}}; + return {{"Rcut_type", this->info.Rcut_type}, {"hf_Rcut", hf_Rcut}}; } case Conv_Coulomb_Pot_K::Ccp_Type::Hse: return {{"hse_omega", this->info.hse_omega}}; case Conv_Coulomb_Pot_K::Ccp_Type::Cam: { - // 4/3 * pi * Rcut^3 = V_{supercell} = V_{unitcell} * Nk - const int nspin0 = (PARAM.inp.nspin == 2) ? 2 : 1; - const double hf_Rcut - = std::pow(0.75 * this->p_kv->get_nkstot_full() / nspin0 - * GlobalC::ucell.omega / (ModuleBase::PI), - 1.0 / 3.0); return {{"hse_omega", this->info.hse_omega}, - {"cam_alpha", this->info.cam_alpha}, - {"cam_beta", this->info.cam_beta}, + {"hybrid_alpha", this->info.hybrid_alpha}, + {"hybrid_beta", this->info.hybrid_beta}, + {"Rcut_type", this->info.Rcut_type}, {"hf_Rcut", hf_Rcut}}; } case Conv_Coulomb_Pot_K::Ccp_Type::Ccp_Cam: return {{"hse_omega", this->info.hse_omega}, - {"cam_alpha", this->info.cam_alpha}, - {"cam_beta", this->info.cam_beta}}; + {"hybrid_alpha", this->info.hybrid_alpha}, + {"hybrid_beta", this->info.hybrid_beta}}; default: throw std::domain_error(std::string(__FILE__) + " line " + std::to_string(__LINE__)); @@ -125,7 +139,7 @@ void Exx_LRI::init(const MPI_Comm &mpi_comm_in, const K_Vectors &kv_in, c true); if (this->info_ewald.use_ewald) { - if (this->info.cam_beta) { + if (this->info.hybrid_beta) { this->abfs_ccp_sr = Conv_Coulomb_Pot_K::cal_orbs_ccp( this->abfs, Conv_Coulomb_Pot_K::Ccp_Type::Hse, @@ -153,7 +167,7 @@ void Exx_LRI::init(const MPI_Comm &mpi_comm_in, const K_Vectors &kv_in, c } template -void Exx_LRI::cal_exx_ions(const bool write_cv) +void Exx_LRI::cal_exx_ions(const int istep, const bool write_cv) { ModuleBase::TITLE("Exx_LRI","cal_exx_ions"); ModuleBase::timer::tick("Exx_LRI", "cal_exx_ions"); @@ -163,6 +177,7 @@ void Exx_LRI::cal_exx_ions(const bool write_cv) // this->m_abfsabfs.init_radial_table(Rradial); // this->m_abfslcaos_lcaos.init_radial_table(Rradial); + if(istep>0 && !GlobalC::ucell.if_atoms_can_move()) return; std::vector atoms(GlobalC::ucell.nat); for (int iat = 0; iat < GlobalC::ucell.nat; ++iat) @@ -194,24 +209,25 @@ void Exx_LRI::cal_exx_ions(const bool write_cv) this->cv.Vws = LRI_CV_Tools::get_CVws(Vs); if (this->info_ewald.use_ewald) { std::map>> Vs_sr; - if (this->info.cam_beta) { + if (this->info.hybrid_beta) { Vs_sr = this->sr_cv.cal_Vs(list_As_Vs.first, list_As_Vs.second[0], {{"writable_Vws", true}}); Vs_sr = LRI_CV_Tools::mul2( - RI::Global_Func::convert(-this->info.cam_beta), + RI::Global_Func::convert(-this->info.hybrid_beta), Vs_sr); this->sr_cv.Vws = LRI_CV_Tools::get_CVws(Vs_sr); } - this->evq.init_ions(period_Vs); - double chi = this->evq.get_singular_chi(this->info_ewald.fq_type, - this->info_ewald.ewald_qdiv); + if (PARAM.inp.cal_stress || istep == 0) + this->evq.init_ions(period_Vs); + + double chi = this->evq.get_singular_chi(this->info_ewald.fq_type, 2.0); std::map>> Vs_full = this->evq.cal_Vs(chi, Vs); Vs_full = LRI_CV_Tools::mul2( - RI::Global_Func::convert(this->info.cam_alpha), + RI::Global_Func::convert(this->info.hybrid_alpha), Vs_full); - Vs = this->info.cam_beta ? LRI_CV_Tools::minus(Vs_full, Vs_sr) + Vs = this->info.hybrid_beta ? LRI_CV_Tools::minus(Vs_full, Vs_sr) : Vs_full; } @@ -228,12 +244,12 @@ void Exx_LRI::cal_exx_ions(const bool write_cv) if (this->info_ewald.use_ewald) { std::map, Ndim>>> dVs_sr; - if (this->info.cam_beta) { + if (this->info.hybrid_beta) { dVs_sr = this->sr_cv.cal_dVs(list_As_Vs.first, list_As_Vs.second[0], {{"writable_dVws", true}}); dVs_sr = LRI_CV_Tools::mul2( - RI::Global_Func::convert(-this->info.cam_beta), + RI::Global_Func::convert(-this->info.hybrid_beta), dVs_sr); this->sr_cv.dVws = LRI_CV_Tools::get_dCVws(dVs_sr); } @@ -241,9 +257,9 @@ void Exx_LRI::cal_exx_ions(const bool write_cv) // dVs = this->evq.cal_dVs(chi, dVs); std::map, Ndim>>> dVs_full = LRI_CV_Tools::mul2( - RI::Global_Func::convert(this->info.cam_alpha), + RI::Global_Func::convert(this->info.hybrid_alpha), dVs); - dVs = this->info.cam_beta ? LRI_CV_Tools::minus(dVs_full, dVs_sr) + dVs = this->info.hybrid_beta ? LRI_CV_Tools::minus(dVs_full, dVs_sr) : dVs_full; } @@ -276,7 +292,7 @@ void Exx_LRI::cal_exx_ions(const bool write_cv) Cs_dCs = this->cv.cal_Cs_dCs( list_As_Cs.first, list_As_Cs.second[0], - {{"cal_dC", PARAM.inp.cal_force||PARAM.inp.cal_stress}, + {{"cal_dC", PARAM.inp.cal_force || PARAM.inp.cal_stress}, {"writable_Cws", true}, {"writable_dCws", true}, {"writable_Vws", false}, diff --git a/source/module_ri/Exx_LRI_interface.hpp b/source/module_ri/Exx_LRI_interface.hpp index a86c65771a..57b85c206f 100644 --- a/source/module_ri/Exx_LRI_interface.hpp +++ b/source/module_ri/Exx_LRI_interface.hpp @@ -76,7 +76,7 @@ void Exx_LRI_Interface::exx_beforescf(const int istep, const K_Vectors XC_Functional::set_xc_type("scan"); } } - this->exx_ptr->cal_exx_ions(PARAM.inp.out_ri_cv); + this->exx_ptr->cal_exx_ions(istep, PARAM.inp.out_ri_cv); } if (Exx_Abfs::Jle::generate_matrix) diff --git a/source/module_ri/RPA_LRI.h b/source/module_ri/RPA_LRI.h index 5a8cc1f256..05a16e6f22 100644 --- a/source/module_ri/RPA_LRI.h +++ b/source/module_ri/RPA_LRI.h @@ -38,7 +38,8 @@ template class RPA_LRI ~RPA_LRI(){}; void init(const MPI_Comm &mpi_comm_in, const K_Vectors &kv_in, const std::vector& orb_cutoff); void cal_rpa_cv(); - void cal_postSCF_exx(const elecstate::DensityMatrix& dm, + void cal_postSCF_exx(const int istep, + const elecstate::DensityMatrix& dm, const MPI_Comm& mpi_comm_in, const K_Vectors& kv, const LCAO_Orbitals& orb); diff --git a/source/module_ri/RPA_LRI.hpp b/source/module_ri/RPA_LRI.hpp index 19d0ec69cd..a86d5dbf0a 100644 --- a/source/module_ri/RPA_LRI.hpp +++ b/source/module_ri/RPA_LRI.hpp @@ -71,7 +71,8 @@ void RPA_LRI::cal_rpa_cv() } template -void RPA_LRI::cal_postSCF_exx(const elecstate::DensityMatrix& dm, +void RPA_LRI::cal_postSCF_exx(const int istep, + const elecstate::DensityMatrix& dm, const MPI_Comm& mpi_comm_in, const K_Vectors& kv, const LCAO_Orbitals& orb) @@ -106,7 +107,7 @@ void RPA_LRI::cal_postSCF_exx(const elecstate::DensityMatrix GlobalC::exx_info.info_ri.ccp_rmesh_times = PARAM.inp.rpa_ccp_rmesh_times; exx_lri_rpa.init(mpi_comm_in, kv, orb); - exx_lri_rpa.cal_exx_ions(PARAM.inp.out_ri_cv); + exx_lri_rpa.cal_exx_ions(0, PARAM.inp.out_ri_cv); if (exx_spacegroup_symmetry && PARAM.inp.exx_symmetry_realspace) { exx_lri_rpa.cal_exx_elec(Ds, *dm.get_paraV_pointer(), &symrot); diff --git a/source/module_ri/conv_coulomb_pot_k.cpp b/source/module_ri/conv_coulomb_pot_k.cpp index c353655968..726e621fa5 100644 --- a/source/module_ri/conv_coulomb_pot_k.cpp +++ b/source/module_ri/conv_coulomb_pot_k.cpp @@ -17,15 +17,15 @@ std::vector cal_psi_ccp(const std::vector& psif) { std::vector cal_psi_ccp_cam(const std::vector& psif, const std::vector& k_radial, const double omega, - const double cam_alpha, - const double cam_beta) { + const double hybrid_alpha, + const double hybrid_beta) { std::vector psik2_ccp(psif.size()); for (size_t ik = 0; ik < psif.size(); ++ik) { double fock_part = 1 - std::exp(-(k_radial[ik] * k_radial[ik]) / (4 * omega * omega)); psik2_ccp[ik] = ModuleBase::FOUR_PI * psif[ik] - * (cam_alpha + cam_beta * fock_part); + * (hybrid_alpha + hybrid_beta * fock_part); } return psik2_ccp; } @@ -34,11 +34,33 @@ std::vector cal_psi_ccp_cam(const std::vector& psif, // Sphere truction -- Spencer std::vector cal_psi_hf(const std::vector& psif, const std::vector& k_radial, - const double hf_Rcut) { + const int Rcut_type, + const double Rc) { std::vector psik2_ccp(psif.size()); + double Rw = 1.092 * Rc; + double gamma = 5.0 / Rc; + double dr = 0.01; + int nr = static_cast(5 * Rc / dr); for (size_t ik = 0; ik < psif.size(); ++ik) - psik2_ccp[ik] = ModuleBase::FOUR_PI * psif[ik] - * (1 - std::cos(k_radial[ik] * hf_Rcut)); + { + if (Rcut_type == 0) + { + psik2_ccp[ik] = ModuleBase::FOUR_PI * psif[ik] + * (1 - std::cos(k_radial[ik] * Rc)); + } + else if (Rcut_type == 1) + { + double sum_r = 0; + for (size_t ir = 0; ir != nr; ++ir) + { + double r = dr * ir; + sum_r += (std::erfc(gamma * r) + + 0.5 * std::erfc((std::log(r) - std::log(Rc)) / std::log(1.092)) * std::erf(gamma * r)) + * std::sin(r * k_radial[ik]); + } + psik2_ccp[ik] = ModuleBase::FOUR_PI * psif[ik] * dr * sum_r * k_radial[ik]; + } + } return psik2_ccp; } @@ -58,8 +80,9 @@ std::vector cal_psi_cam( const std::vector& psif, const std::vector& k_radial, const double omega, - const double cam_alpha, - const double cam_beta, + const double hybrid_alpha, + const double hybrid_beta, + const int Rcut_type, const double Rc) { double eps = 1e-14; std::vector psik2_ccp(psif.size()); @@ -83,7 +106,7 @@ std::vector cal_psi_cam( = -0.5 * (-2 + 2 * temp0 + temp1 * (temp2 + temp3)); psik2_ccp[ik] = ModuleBase::FOUR_PI * psif[ik] - * (cam_alpha * coulomb_part + cam_beta * fock_part.real()); + * (hybrid_alpha * coulomb_part + hybrid_beta * fock_part.real()); } return psik2_ccp; } @@ -102,6 +125,7 @@ Numerical_Orbital_Lm cal_orbs_ccp( case Ccp_Type::Hf: psik2_ccp = cal_psi_hf(orbs.get_psif(), orbs.get_k_radial(), + parameter.at("Rcut_type"), parameter.at("hf_Rcut")); break; case Ccp_Type::Hse: @@ -113,16 +137,17 @@ Numerical_Orbital_Lm cal_orbs_ccp( psik2_ccp = cal_psi_cam(orbs.get_psif(), orbs.get_k_radial(), parameter.at("hse_omega"), - parameter.at("cam_alpha"), - parameter.at("cam_beta"), + parameter.at("hybrid_alpha"), + parameter.at("hybrid_beta"), + parameter.at("Rcut_type"), parameter.at("hf_Rcut")); break; case Ccp_Type::Ccp_Cam: psik2_ccp = cal_psi_ccp_cam(orbs.get_psif(), orbs.get_k_radial(), parameter.at("hse_omega"), - parameter.at("cam_alpha"), - parameter.at("cam_beta")); + parameter.at("hybrid_alpha"), + parameter.at("hybrid_beta")); break; default: throw(ModuleBase::GlobalFunc::TO_STRING(__FILE__) + " line " diff --git a/source/module_ri/conv_coulomb_pot_k.h b/source/module_ri/conv_coulomb_pot_k.h index e32ee8512a..9d0c6fdb9b 100644 --- a/source/module_ri/conv_coulomb_pot_k.h +++ b/source/module_ri/conv_coulomb_pot_k.h @@ -13,8 +13,8 @@ namespace Conv_Coulomb_Pot_K Ccp, // Hf, // "hf_Rcut" Hse, // "hse_omega" - Cam, // "hse_omega", "cam_alpha", "cam_beta", "hf_Rcut" - Ccp_Cam // "hse_omega", "cam_alpha", "cam_beta" + Cam, // "hse_omega", "hybrid_alpha", "hybrid_beta", "hf_Rcut" + Ccp_Cam // "hse_omega", "hybrid_alpha", "hybrid_beta" }; template T cal_orbs_ccp( @@ -34,7 +34,8 @@ namespace Conv_Coulomb_Pot_K std::vector cal_psi_hf( const std::vector &psif, const std::vector &k_radial, - const double hf_Rcut); + const int Rcut_type, + const double Rc); std::vector cal_psi_hse( const std::vector & psif, const std::vector & k_radial, @@ -43,15 +44,16 @@ namespace Conv_Coulomb_Pot_K const std::vector& psif, const std::vector& k_radial, const double omega, - const double cam_alpha, - const double cam_beta, + const double hybrid_alpha, + const double hybrid_beta, + const int Rcut_type, const double Rc); std::vector cal_psi_ccp_cam(const std::vector& psif, const std::vector& k_radial, const double omega, - const double cam_alpha, - const double cam_beta); + const double hybrid_alpha, + const double hybrid_beta); } #include "conv_coulomb_pot_k.hpp" diff --git a/source/runner b/source/runner deleted file mode 100644 index 6ad7a073db..0000000000 --- a/source/runner +++ /dev/null @@ -1,65 +0,0 @@ -driver_run.cpp: p_esolver->before_all_runners(PARAM.inp, GlobalC::ucell); -driver_run.cpp: p_esolver->others(istep); -driver_run.cpp: p_esolver->after_all_runners(); -module_esolver/esolver.cpp: p_esolver->before_all_runners(inp, ucell); -module_esolver/esolver.cpp: p_esolver->runner(0, ucell); // scf-only -module_md/md_func.cpp: p_esolver->runner(istep, unit_in); -module_md/md_func.cpp: potential = p_esolver->cal_energy(); -module_md/md_func.cpp: p_esolver->cal_force(force_temp); -module_md/md_func.cpp: p_esolver->cal_stress(virial); -module_md/test/fire_test.cpp: p_esolver->before_all_runners(param_in.inp, ucell); -module_md/test/langevin_test.cpp: p_esolver->before_all_runners(param_in.inp, ucell); -module_md/test/lj_pot_test.cpp: p_esolver->before_all_runners(input, ucell); -module_md/test/lj_pot_test.cpp: p_esolver->before_all_runners(input, ucell); -module_md/test/lj_pot_test.cpp: p_esolver->before_all_runners(input, ucell); -module_md/test/lj_pot_test.cpp: p_esolver->ucell_ = &ucell; -module_md/test/lj_pot_test.cpp: p_esolver->rcut_search_radius(rcut); -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->lj_rcut(i, j), 3.0 * ModuleBase::ANGSTROM_AU, doublethreshold); -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->search_radius, 3.0 * ModuleBase::ANGSTROM_AU + 0.01, doublethreshold); -module_md/test/lj_pot_test.cpp: p_esolver->rcut_search_radius(rcut); -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->lj_rcut(0, 0), 3.0 * ModuleBase::ANGSTROM_AU, doublethreshold); -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->lj_rcut(0, 1), 4.0 * ModuleBase::ANGSTROM_AU, doublethreshold); -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->lj_rcut(1, 0), 4.0 * ModuleBase::ANGSTROM_AU, doublethreshold); -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->lj_rcut(1, 1), 5.0 * ModuleBase::ANGSTROM_AU, doublethreshold); -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->search_radius, 5.0 * ModuleBase::ANGSTROM_AU + 0.01, doublethreshold); -module_md/test/lj_pot_test.cpp: p_esolver->ucell_ = &ucell; -module_md/test/lj_pot_test.cpp: p_esolver->set_c6_c12(rule, lj_epsilon, lj_sigma); -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->lj_c6(i, j), 4.0 * lj_epsilon[k] * temp / ModuleBase::Ry_to_eV, doublethreshold); -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->lj_c12(i, j), p_esolver->lj_c6(i, j) * temp, doublethreshold); -module_md/test/lj_pot_test.cpp: EXPECT_DOUBLE_EQ(p_esolver->lj_c6(i, j), p_esolver->lj_c6(j, i)); -module_md/test/lj_pot_test.cpp: EXPECT_DOUBLE_EQ(p_esolver->lj_c12(i, j), p_esolver->lj_c12(j, i)); -module_md/test/lj_pot_test.cpp: p_esolver->set_c6_c12(rule, lj_epsilon, lj_sigma); -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->lj_c6(i, i), 4.0 * lj_epsilon[i] * temp / ModuleBase::Ry_to_eV, doublethreshold); -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->lj_c12(i, i), p_esolver->lj_c6(i, i) * temp, doublethreshold); -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->lj_c6(i, j), -module_md/test/lj_pot_test.cpp: std::sqrt(p_esolver->lj_c6(i, i) * p_esolver->lj_c6(j, j)), -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->lj_c12(i, j), -module_md/test/lj_pot_test.cpp: std::sqrt(p_esolver->lj_c12(i, i) * p_esolver->lj_c12(j, j)), -module_md/test/lj_pot_test.cpp: EXPECT_DOUBLE_EQ(p_esolver->lj_c6(i, j), p_esolver->lj_c6(j, i)); -module_md/test/lj_pot_test.cpp: EXPECT_DOUBLE_EQ(p_esolver->lj_c12(i, j), p_esolver->lj_c12(j, i)); -module_md/test/lj_pot_test.cpp: p_esolver->set_c6_c12(rule, lj_epsilon, lj_sigma); -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->lj_c6(i, j), -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->lj_c12(i, j), p_esolver->lj_c6(i, j) * temp, doublethreshold); -module_md/test/lj_pot_test.cpp: EXPECT_DOUBLE_EQ(p_esolver->lj_c6(i, j), p_esolver->lj_c6(j, i)); -module_md/test/lj_pot_test.cpp: EXPECT_DOUBLE_EQ(p_esolver->lj_c12(i, j), p_esolver->lj_c12(j, i)); -module_md/test/lj_pot_test.cpp: p_esolver->ucell_ = &ucell; -module_md/test/lj_pot_test.cpp: p_esolver->rcut_search_radius(rcut); -module_md/test/lj_pot_test.cpp: p_esolver->set_c6_c12(rule, lj_epsilon, lj_sigma); -module_md/test/lj_pot_test.cpp: p_esolver->cal_en_shift(false); -module_md/test/lj_pot_test.cpp: EXPECT_DOUBLE_EQ(p_esolver->en_shift(i, j), 0.0); -module_md/test/lj_pot_test.cpp: p_esolver->cal_en_shift(true); -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->en_shift(0, 0), -2.5810212013100967e-09, doublethreshold); -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->en_shift(0, 1), -3.303688865319793e-07, doublethreshold); -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->en_shift(1, 0), -3.303688865319793e-07, doublethreshold); -module_md/test/lj_pot_test.cpp: EXPECT_NEAR(p_esolver->en_shift(1, 1), -5.6443326024140752e-06, doublethreshold); -module_md/test/msst_test.cpp: p_esolver->before_all_runners(param_in.inp, ucell); -module_md/test/nhchain_test.cpp: p_esolver->before_all_runners(param_in.inp, ucell); -module_md/test/verlet_test.cpp: p_esolver->before_all_runners(param_in.inp, ucell); -module_relax/relax_driver.cpp: p_esolver->runner(istep - 1, GlobalC::ucell); -module_relax/relax_driver.cpp: this->etot = p_esolver->cal_energy(); -module_relax/relax_driver.cpp: p_esolver->cal_force(force); -module_relax/relax_driver.cpp: p_esolver->cal_stress(stress); -module_relax/relax_driver.cpp: if (p_esolver && stop && p_esolver->get_maxniter() == p_esolver->get_niter() -module_relax/relax_driver.cpp: && !(p_esolver->get_conv_elec())) -module_relax/relax_driver.cpp: Json::add_output_energy(p_esolver->cal_energy() * ModuleBase::Ry_to_eV); -module_ri/Exx_LRI_interface.hpp: // GlobalC::exx_lcao.cal_exx_elec(p_esolver->LOC, p_esolver->LOWF.wfc_k_grid);