Skip to content

Commit 89ce6d1

Browse files
committed
Merge branch 'develop' of https://github.com/deepmodeling/abacus-develop into hotfix
2 parents b272004 + 806de4a commit 89ce6d1

File tree

3 files changed

+25
-18
lines changed

3 files changed

+25
-18
lines changed

source/module_ri/module_exx_symmetry/irreducible_sector.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,6 @@ namespace ModuleSymmetry
127127

128128
/// symmetry info for BvK supercell
129129
std::vector<int> isymbvk_to_isym_;
130-
std::vector<ModuleBase::Matrix3> bvk_gmatrix_;
131-
std::vector<ModuleBase::Vector3<double>> bvk_gtrans_;
132130
int bvk_nsym_;
133131

134132
friend class Symmetry_rotation;

source/module_ri/module_exx_symmetry/irreducible_sector_bvk.cpp

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,15 @@ namespace ModuleSymmetry
4040
ModuleBase::TITLE("Irreducible_Sector", "gen_symmetry_BvK");
4141
auto set_matrix3 = [](const ModuleBase::Vector3<double>& a1, const ModuleBase::Vector3<double>& a2, const ModuleBase::Vector3<double>& a3)
4242
-> ModuleBase::Matrix3 {return ModuleBase::Matrix3(a1.x, a1.y, a1.z, a2.x, a2.y, a2.z, a3.x, a3.y, a3.z);};
43-
43+
auto set_bvk_same_as_ucell = [&symm, this]()->void
44+
{
45+
this->bvk_nsym_ = symm.nrotk;
46+
this->isymbvk_to_isym_.resize(symm.nrotk);
47+
for (int isym = 0;isym < symm.nrotk;++isym) { this->isymbvk_to_isym_[isym] = isym; }
48+
};
4449
if (bvk_period[0] == bvk_period[1] && bvk_period[0] == bvk_period[2])
4550
{ //the BvK supercell has the same symmetry as the original cell
46-
this->bvk_nsym_ = symm.nrotk;
47-
this->isymbvk_to_isym_.resize(symm.nrotk);
48-
for (int isym = 0;isym < symm.nrotk;++isym) { this->isymbvk_to_isym_[isym] = isym;
49-
}
51+
set_bvk_same_as_ucell();
5052
return;
5153
}
5254

@@ -129,23 +131,30 @@ namespace ModuleSymmetry
129131
bvk_op.resize(bvk_nop);
130132
int bvk_npg, bvk_nsg, bvk_pgnum, bvk_sgnum;
131133
std::string bvk_pgname, bvk_sgname;
132-
this->bvk_gmatrix_.resize(48);
133-
this->bvk_gtrans_.resize(48);
134+
std::vector<ModuleBase::Matrix3> bvk_gmatrix(48);
135+
std::vector<ModuleBase::Vector3<double>> bvk_gtrans(48);
134136
symm.getgroup(bvk_npg, bvk_nsg, GlobalV::ofs_running, bvk_nop,
135-
bvk_op.data(), this->bvk_gmatrix_.data(), this->bvk_gtrans_.data(),
137+
bvk_op.data(), bvk_gmatrix.data(), bvk_gtrans.data(),
136138
bvk_dpos.data(), bvk_rot_dpos.data(), order_index.data(),
137139
bvk_itmin_type, bvk_itmin_start, bvk_istart.data(), bvk_na.data());
138-
this->bvk_gmatrix_.resize(bvk_nsg);
139-
this->bvk_gtrans_.resize(bvk_nsg);
140+
bvk_gmatrix.resize(bvk_nsg);
141+
bvk_gtrans.resize(bvk_nsg);
140142
this->bvk_nsym_ = bvk_nsg;
141-
symm.pointgroup(bvk_npg, bvk_pgnum, bvk_pgname, this->bvk_gmatrix_.data(), GlobalV::ofs_running);
143+
// bvk suppercell cannot have higher symmetry than the original cell
144+
if (this->bvk_nsym_ > symm.nrotk)
145+
{
146+
std::cout << "reset bvk symmetry to the same as the original cell" << std::endl;
147+
set_bvk_same_as_ucell();
148+
return;
149+
}
150+
symm.pointgroup(bvk_npg, bvk_pgnum, bvk_pgname, bvk_gmatrix.data(), GlobalV::ofs_running);
142151
ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "POINT GROUP OF BvK SCELL", bvk_pgname);
143-
symm.pointgroup(bvk_nsg, bvk_sgnum, bvk_sgname, this->bvk_gmatrix_.data(), GlobalV::ofs_running);
152+
symm.pointgroup(bvk_nsg, bvk_sgnum, bvk_sgname, bvk_gmatrix.data(), GlobalV::ofs_running);
144153
ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "POINT GROUP IN SPACE GROUP OF BvK SCELL", bvk_sgname);
145-
symm.gmatrix_convert_int(this->bvk_gmatrix_.data(), this->bvk_gmatrix_.data(), bvk_nsg, bvk_min_optlat, lat.latvec);
146-
symm.gtrans_convert(this->bvk_gtrans_.data(), this->bvk_gtrans_.data(), bvk_nsg, bvk_min_optlat, lat.latvec);
154+
symm.gmatrix_convert_int(bvk_gmatrix.data(), bvk_gmatrix.data(), bvk_nsg, bvk_min_optlat, lat.latvec);
155+
symm.gtrans_convert(bvk_gtrans.data(), bvk_gtrans.data(), bvk_nsg, bvk_min_optlat, lat.latvec);
147156
// get map from bvk-op to original op
148-
this->isymbvk_to_isym_ = get_isymbvk_to_isym_map(this->bvk_gmatrix_, symm);
157+
this->isymbvk_to_isym_ = get_isymbvk_to_isym_map(bvk_gmatrix, symm);
149158
return;
150159
}
151160

source/module_ri/module_exx_symmetry/symmetry_rotation.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ namespace ModuleSymmetry
210210
// gmatc should be a rotation matrix, i.e. det(gmatc)=1
211211
TCdouble Symmetry_rotation::get_euler_angle(const ModuleBase::Matrix3& gmatc) const
212212
{
213-
double threshold = 1e-8;
213+
double threshold = this->eps_;
214214
double alpha, beta, gamma;
215215
if (std::fabs(gmatc.e32) > threshold || std::fabs(gmatc.e31) > threshold) // sin(beta) is not zero
216216
{

0 commit comments

Comments
 (0)