diff --git a/source/module_cell/atom_pseudo.cpp b/source/module_cell/atom_pseudo.cpp index 03b41205e4..863cbbbb3a 100644 --- a/source/module_cell/atom_pseudo.cpp +++ b/source/module_cell/atom_pseudo.cpp @@ -2,20 +2,24 @@ Atom_pseudo::Atom_pseudo() { - for (int is = 0; is < 4; is++) + for (int is = 0; is < 4; is++) { this->index1_soc[is] = nullptr; - for (int is = 0; is < 4; is++) +} + for (int is = 0; is < 4; is++) { this->index2_soc[is] = nullptr; } +} Atom_pseudo::~Atom_pseudo() { for (int is = 0; is < 4; is++) { - if (this->index1_soc[is] != nullptr) + if (this->index1_soc[is] != nullptr) { delete[] this->index1_soc[is]; - if (this->index2_soc[is] != nullptr) +} + if (this->index2_soc[is] != nullptr) { delete[] this->index2_soc[is]; +} } } @@ -118,8 +122,9 @@ void Atom_pseudo::set_d_so(ModuleBase::ComplexMatrix& d_so_in, { for (int is2 = 0; is2 < 2; is2++) { - if (is >= GlobalV::NSPIN) + if (is >= GlobalV::NSPIN) { break; +} for (int L1 = 0; L1 < nproj_soc; L1++) { for (int L2 = 0; L2 < nproj_soc; L2++) @@ -165,7 +170,7 @@ void Atom_pseudo::bcast_atom_pseudo() Parallel_Common::bcast_int(nchi); Parallel_Common::bcast_int(nbeta); Parallel_Common::bcast_int(nv); - Parallel_Common::bcast_int(zv); + Parallel_Common::bcast_double(zv); // double Parallel_Common::bcast_double(etotps); @@ -240,8 +245,9 @@ void Atom_pseudo::bcast_atom_pseudo() // == end of pseudo_vl == // == pseudo == - if (nbeta == 0) + if (nbeta == 0) { return; +} if (GlobalV::MY_RANK != 0) { diff --git a/source/module_cell/pseudo.h b/source/module_cell/pseudo.h index e3f1bd7f4d..43fa2a81b6 100644 --- a/source/module_cell/pseudo.h +++ b/source/module_cell/pseudo.h @@ -22,7 +22,7 @@ class pseudo bool tvanp = false; // .true. if Ultrasoft bool nlcc = false; // Non linear core corrections(bool) std::string xc_func; // Exch-Corr type - int zv = 0; // z valence + double zv = 0; // z valence double etotps = 0.0; // total energy double ecutwfc = 0.0; // suggested cut-off for wfc double ecutrho = 0.0; // suggested cut-off for rho diff --git a/source/module_cell/read_pp_blps.cpp b/source/module_cell/read_pp_blps.cpp index cc98842f7b..f8425ba388 100644 --- a/source/module_cell/read_pp_blps.cpp +++ b/source/module_cell/read_pp_blps.cpp @@ -36,7 +36,7 @@ int Pseudopot_upf::read_pseudo_blps(std::ifstream &ifs, Atom_pseudo& pp) double zatom; double zion; ifs >> zatom >> zion; - pp.zv = static_cast(zion); + pp.zv = zion; ifs.ignore(300, '\n'); atom_in ai; diff --git a/source/module_cell/read_pp_upf201.cpp b/source/module_cell/read_pp_upf201.cpp index 5d6483d5ee..b665557ffa 100644 --- a/source/module_cell/read_pp_upf201.cpp +++ b/source/module_cell/read_pp_upf201.cpp @@ -289,7 +289,7 @@ void Pseudopot_upf::read_pseudo_upf201_header(std::ifstream& ifs, Atom_pseudo& p } else if (name[ip] == "z_valence") { - pp.zv = atof(val[ip].c_str()); + pp.zv = std::stod(val[ip]); } else if (name[ip] == "total_psenergy") { diff --git a/source/module_cell/read_pp_vwr.cpp b/source/module_cell/read_pp_vwr.cpp index 652e6a6f5f..15e6f4ae59 100644 --- a/source/module_cell/read_pp_vwr.cpp +++ b/source/module_cell/read_pp_vwr.cpp @@ -49,7 +49,7 @@ int Pseudopot_upf::read_pseudo_vwr(std::ifstream &ifs, Atom_pseudo& pp) GlobalV::ofs_running << std::setw(15) << "ATOM" << std::setw(15) << pp.psd << std::endl; // (4) valence electron number ifs >> value; length = value.find(","); value.erase(length,1); - pp.zv = std::atoi( value.c_str() ); + pp.zv = std::stod( value ); GlobalV::ofs_running << std::setw(15) << "Z(VALENCE)" << std::setw(15) << pp.zv << std::endl; // (5) spd_loc, which local pseudopotential should I choose ifs >> value; length = value.find(","); value.erase(length,1); diff --git a/source/module_io/berryphase.cpp b/source/module_io/berryphase.cpp index 33c59e7c79..a93f75e7d6 100644 --- a/source/module_io/berryphase.cpp +++ b/source/module_io/berryphase.cpp @@ -507,7 +507,8 @@ void berryphase::Macroscopic_polarization(const int npwx, { for (int ia = 0; ia < GlobalC::ucell.atoms[it].na; ia++) { - if (GlobalC::ucell.atoms[it].ncpp.zv % 2 == 1) + // should consider fractional electron number + if (int(GlobalC::ucell.atoms[it].ncpp.zv) % 2 == 1) { mod_ion[atom_index] = 1; lodd = true; diff --git a/source/module_io/json_output/init_info.cpp b/source/module_io/json_output/init_info.cpp index 60455ebf69..9cff3c5192 100644 --- a/source/module_io/json_output/init_info.cpp +++ b/source/module_io/json_output/init_info.cpp @@ -32,7 +32,7 @@ void gen_init(UnitCell* ucell) { std::string label = ucell->atoms[it].label; int atom_number = ucell->atoms[it].na; - int number = ucell->atoms[it].ncpp.zv; + double number = ucell->atoms[it].ncpp.zv; nelec_total += ucell->atoms[it].ncpp.zv * ucell->atoms[it].na; AbacusJson::add_json({"init", "natom_each_type", label}, atom_number, false); diff --git a/source/module_io/json_output/test/para_json_test.cpp b/source/module_io/json_output/test/para_json_test.cpp index 5d8526a8e0..fef6aae052 100644 --- a/source/module_io/json_output/test/para_json_test.cpp +++ b/source/module_io/json_output/test/para_json_test.cpp @@ -304,9 +304,9 @@ TEST(AbacusJsonTest, InitInfo) ASSERT_STREQ(Json::AbacusJson::doc["init"]["point_group"].GetString(), "T_d"); ASSERT_STREQ(Json::AbacusJson::doc["init"]["point_group_in_space"].GetString(), "O_h"); - ASSERT_EQ(Json::AbacusJson::doc["init"]["nelectron_each_type"]["Si"].GetInt(), 3); - ASSERT_EQ(Json::AbacusJson::doc["init"]["nelectron_each_type"]["C"].GetInt(), 4); - ASSERT_EQ(Json::AbacusJson::doc["init"]["nelectron_each_type"]["O"].GetInt(), 5); + ASSERT_EQ(Json::AbacusJson::doc["init"]["nelectron_each_type"]["Si"].GetDouble(), 3); + ASSERT_EQ(Json::AbacusJson::doc["init"]["nelectron_each_type"]["C"].GetDouble(), 4); + ASSERT_EQ(Json::AbacusJson::doc["init"]["nelectron_each_type"]["O"].GetDouble(), 5); ASSERT_EQ(Json::AbacusJson::doc["init"]["natom_each_type"]["Si"].GetInt(), 1); ASSERT_EQ(Json::AbacusJson::doc["init"]["natom_each_type"]["C"].GetInt(), 2);