@@ -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
0 commit comments