@@ -40,13 +40,15 @@ namespace ModuleSymmetry
40
40
ModuleBase::TITLE (" Irreducible_Sector" , " gen_symmetry_BvK" );
41
41
auto set_matrix3 = [](const ModuleBase::Vector3<double >& a1, const ModuleBase::Vector3<double >& a2, const ModuleBase::Vector3<double >& a3)
42
42
-> 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
+ };
44
49
if (bvk_period[0 ] == bvk_period[1 ] && bvk_period[0 ] == bvk_period[2 ])
45
50
{ // 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 ();
50
52
return ;
51
53
}
52
54
@@ -129,23 +131,30 @@ namespace ModuleSymmetry
129
131
bvk_op.resize (bvk_nop);
130
132
int bvk_npg, bvk_nsg, bvk_pgnum, bvk_sgnum;
131
133
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 );
134
136
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 (),
136
138
bvk_dpos.data (), bvk_rot_dpos.data (), order_index.data (),
137
139
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);
140
142
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);
142
151
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);
144
153
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 );
147
156
// 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);
149
158
return ;
150
159
}
151
160
0 commit comments