Skip to content

Commit e78b052

Browse files
committed
fix write_istate_info test
1 parent 2048ad5 commit e78b052

File tree

4 files changed

+40
-113
lines changed

4 files changed

+40
-113
lines changed

source/module_cell/klist.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -178,12 +178,6 @@ void K_Vectors::renew(const int& kpoint_number)
178178
isk.resize(kpoint_number);
179179
ngk.resize(kpoint_number);
180180

181-
/*ModuleBase::Memory::record("KV::kvec_c",sizeof(double) * kpoint_number*3);
182-
ModuleBase::Memory::record("KV::kvec_d",sizeof(double) * kpoint_number*3);
183-
ModuleBase::Memory::record("KV::wk",sizeof(double) * kpoint_number*3);
184-
ModuleBase::Memory::record("KV::isk",sizeof(int) * kpoint_number*3);
185-
ModuleBase::Memory::record("KV::ngk",sizeof(int) * kpoint_number*3);*/
186-
187181
return;
188182
}
189183

source/module_cell/parallel_kpoints.cpp

Lines changed: 5 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,12 @@ void Parallel_Kpoints::get_whichpool(const int& nkstot)
4848
{
4949
this->whichpool.resize(nkstot, 0);
5050

51-
// std::cout << " calculate : whichpool" << std::endl;
52-
// std::cout << " nkstot is " << nkstot << std::endl;
53-
54-
5551
for (int i = 0; i < this->kpar; i++)
5652
{
5753
for (int ik = 0; ik < this->nks_pool[i]; ik++)
5854
{
5955
const int k_now = ik + startk_pool[i];
6056
this->whichpool[k_now] = i;
61-
// ofs_running << "\n whichpool[" << k_now <<"] = " << whichpool[k_now];
6257
}
6358
}
6459

@@ -72,19 +67,13 @@ void Parallel_Kpoints::get_nks_pool(const int& nkstot)
7267
const int nks_ave = nkstot / this->kpar;
7368
const int remain = nkstot % this->kpar;
7469

75-
// ofs_running << "\n nkstot = " << nkstot;
76-
// ofs_running << "\n this->kpar = " << this->kpar;
77-
// ofs_running << "\n nks_ave = " << nks_ave;
78-
7970
for (int i = 0; i < this->kpar; i++)
80-
8171
{
8272
this->nks_pool[i] = nks_ave;
8373
if (i < remain)
8474
{
8575
nks_pool[i]++;
8676
}
87-
// ofs_running << "\n nks_pool[i] = " << nks_pool[i];
8877
}
8978
return;
9079
}
@@ -93,14 +82,10 @@ void Parallel_Kpoints::get_startk_pool(const int& nkstot)
9382
{
9483
startk_pool.resize(this->kpar, 0);
9584

96-
// const int remain = nkstot%this->kpar;
97-
9885
startk_pool[0] = 0;
9986
for (int i = 1; i < this->kpar; i++)
100-
10187
{
10288
startk_pool[i] = startk_pool[i - 1] + nks_pool[i - 1];
103-
// ofs_running << "\n startk_pool[i] = " << startk_pool[i];
10489
}
10590
return;
10691
}
@@ -120,7 +105,6 @@ void Parallel_Kpoints::set_startpro_pool()
120105
{
121106
startpro_pool[i]++;
122107
}
123-
// ofs_running << "\n startpro_pool[i] = " << startpro_pool[i];
124108
}
125109
return;
126110
}
@@ -138,8 +122,6 @@ void Parallel_Kpoints::gatherkvec(const std::vector<ModuleBase::Vector3<double>>
138122
{
139123
vec_global[i + startk_pool[this->my_pool]] = vec_local[i];
140124
}
141-
// vec_global[i + startk_pool[MY_POOL]] = vec_local[i] / double(NPROC_IN_POOL);
142-
143125
}
144126

145127
MPI_Allreduce(MPI_IN_PLACE, &vec_global[0], 3 * this->nkstot_np, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
@@ -152,7 +134,6 @@ void Parallel_Kpoints::pool_collection(double& value, const double* wk, const in
152134
#ifdef __MPI
153135

154136
const int ik_now = ik - this->startk_pool[this->my_pool];
155-
// ofs_running << "\n\n ik=" << ik << " ik_now=" << ik_now;
156137

157138
const int pool = this->whichpool[ik];
158139

@@ -167,8 +148,6 @@ void Parallel_Kpoints::pool_collection(double& value, const double* wk, const in
167148
}
168149
else
169150
{
170-
171-
// ofs_running << " receive data.";
172151
MPI_Status ierror;
173152
MPI_Recv(&value, 1, MPI_DOUBLE, this->startpro_pool[pool], ik, MPI_COMM_WORLD, &ierror);
174153

@@ -178,18 +157,12 @@ void Parallel_Kpoints::pool_collection(double& value, const double* wk, const in
178157
{
179158
if (this->my_pool == pool)
180159
{
181-
182-
// ofs_running << " send data.";
183-
184160
MPI_Send(&wk[ik_now], 1, MPI_DOUBLE, 0, ik, MPI_COMM_WORLD);
185161
}
186162
}
187163
}
188164
else
189165
{
190-
191-
// ofs_running << "\n do nothing.";
192-
193166
}
194167

195168
MPI_Barrier(MPI_COMM_WORLD);
@@ -238,13 +211,10 @@ void Parallel_Kpoints::pool_collection_aux(T* value, const V& w, const int& dim,
238211
T* p = &w.ptr[begin];
239212
// temprary restrict kpar=1 for NSPIN=2 case for generating_orbitals
240213
int pool = 0;
241-
if (this->nspin != 2) {
242-
pool = this->whichpool[ik];
243-
}
244-
245-
246-
// ofs_running << "\n ik=" << ik;
247-
214+
if (this->nspin != 2)
215+
{
216+
pool = this->whichpool[ik];
217+
}
248218

249219
if (this->rank_in_pool == 0)
250220
{
@@ -261,7 +231,6 @@ void Parallel_Kpoints::pool_collection_aux(T* value, const V& w, const int& dim,
261231
}
262232
else
263233
{
264-
// ofs_running << " receive data.";
265234
MPI_Status ierror;
266235
MPI_Recv(value, dim, MPI_DOUBLE, this->startpro_pool[pool], ik * 2 + 0, MPI_COMM_WORLD, &ierror);
267236
}
@@ -270,14 +239,12 @@ void Parallel_Kpoints::pool_collection_aux(T* value, const V& w, const int& dim,
270239
{
271240
if (this->my_pool == pool)
272241
{
273-
// ofs_running << " send data.";
274242
MPI_Send(p, dim, MPI_DOUBLE, 0, ik * 2 + 0, MPI_COMM_WORLD);
275243
}
276244
}
277245
}
278246
else
279247
{
280-
// ofs_running << "\n do nothing.";
281248
}
282249
MPI_Barrier(MPI_COMM_WORLD);
283250

@@ -292,4 +259,4 @@ void Parallel_Kpoints::pool_collection_aux(T* value, const V& w, const int& dim,
292259
}
293260
// data transfer ends.
294261
#endif
295-
}
262+
}

source/module_io/test/write_istate_info_test.cpp

Lines changed: 33 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,14 @@ class IstateInfoTest : public ::testing::Test
4343

4444
TEST_F(IstateInfoTest, OutIstateInfoS1)
4545
{
46-
// preconditions
46+
// Global variables
4747
GlobalV::KPAR = 1;
4848
PARAM.input.nbands = 4;
4949
PARAM.sys.nbands_l = 4;
5050
PARAM.input.nspin = 1;
5151
PARAM.sys.global_out_dir = "./";
52-
// mpi setting
52+
53+
// MPI setting
5354
Parallel_Global::init_pools(GlobalV::NPROC,
5455
GlobalV::MY_RANK,
5556
PARAM.input.bndpar,
@@ -60,90 +61,54 @@ TEST_F(IstateInfoTest, OutIstateInfoS1)
6061
GlobalV::NPROC_IN_POOL,
6162
GlobalV::RANK_IN_POOL,
6263
GlobalV::MY_POOL);
63-
kv->set_nkstot(100);
64+
65+
const int nkstot_init = 10;
66+
kv->set_nkstot(nkstot_init);
6467
int nkstot = kv->get_nkstot();
65-
kv->para_k.kinfo(nkstot, GlobalV::KPAR, GlobalV::MY_POOL, GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL, PARAM.input.nspin);
66-
// std::cout<<"my_rank "<<GlobalV::MY_RANK<<" pool rank/size: "
67-
// <<GlobalV::RANK_IN_POOL<<"/"<<GlobalV::NPROC_IN_POOL<<std::endl;
68-
// std::cout<<"MY_POOL "<<GlobalV::MY_POOL<<std::endl;
68+
kv->para_k.kinfo(nkstot, GlobalV::KPAR, GlobalV::MY_POOL, GlobalV::RANK_IN_POOL,
69+
GlobalV::NPROC_IN_POOL, PARAM.input.nspin);
6970
kv->set_nks(kv->para_k.nks_pool[GlobalV::MY_POOL]);
70-
// std::cout<<"nks "<<kv->get_nks()<<std::endl;
71-
ekb.create(kv->get_nks(), PARAM.input.nbands);
72-
wg.create(kv->get_nks(), PARAM.input.nbands);
73-
ekb.fill_out(0.15);
74-
wg.fill_out(0.0);
75-
kv->kvec_d.resize(kv->get_nkstot());
76-
int i = 0;
77-
for (auto& kd: kv->kvec_d)
71+
72+
// The number of plane waves for each k point
73+
kv->ngk.resize(nkstot);
74+
kv->ik2iktot.resize(nkstot);
75+
for(int i=0; i<nkstot; ++i)
7876
{
79-
kd.set(0.01 * i, 0.01 * i, 0.01 * i);
80-
++i;
77+
kv->ngk[i]=299;
78+
kv->ik2iktot[i]=i;
8179
}
82-
ModuleIO::write_istate_info(ekb, wg, *kv);
83-
std::ifstream ifs;
84-
ifs.open("istate.info");
85-
std::string str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
86-
EXPECT_THAT(
87-
str,
88-
testing::HasSubstr("BAND Energy(ev) Occupation Kpoint = 100"));
89-
EXPECT_THAT(str, testing::HasSubstr("(0.99 0.99 0.99)"));
90-
EXPECT_THAT(str, testing::HasSubstr("4 2.0408547 0"));
91-
ifs.close();
92-
remove("istate.info");
93-
}
9480

95-
TEST_F(IstateInfoTest, OutIstateInfoS2)
96-
{
97-
// preconditions
98-
GlobalV::KPAR = 1;
99-
PARAM.input.nbands = 4;
100-
PARAM.sys.nbands_l = 4;
101-
PARAM.input.nspin = 2;
102-
PARAM.sys.global_out_dir = "./";
103-
// mpi setting
104-
Parallel_Global::init_pools(GlobalV::NPROC,
105-
GlobalV::MY_RANK,
106-
PARAM.input.bndpar,
107-
GlobalV::KPAR,
108-
GlobalV::NPROC_IN_BNDGROUP,
109-
GlobalV::RANK_IN_BPGROUP,
110-
GlobalV::MY_BNDGROUP,
111-
GlobalV::NPROC_IN_POOL,
112-
GlobalV::RANK_IN_POOL,
113-
GlobalV::MY_POOL);
114-
kv->set_nkstot(100);
115-
int nkstot = kv->get_nkstot();
116-
kv->para_k.kinfo(nkstot, GlobalV::KPAR, GlobalV::MY_POOL, GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL, PARAM.input.nspin);
117-
// std::cout<<"my_rank "<<GlobalV::MY_RANK<<" pool rank/size: "
118-
// <<GlobalV::RANK_IN_POOL<<"/"<<GlobalV::NPROC_IN_POOL<<std::endl;
119-
// std::cout<<"MY_POOL "<<GlobalV::MY_POOL<<std::endl;
120-
kv->set_nks(kv->para_k.nks_pool[GlobalV::MY_POOL]);
121-
// std::cout<<"nks "<<kv->get_nks()<<std::endl;
81+
// Initialize the number of bands
12282
ekb.create(kv->get_nks(), PARAM.input.nbands);
12383
wg.create(kv->get_nks(), PARAM.input.nbands);
84+
85+
// fill the eigenvalues
12486
ekb.fill_out(0.15);
87+
88+
// fill the weights
12589
wg.fill_out(0.0);
126-
kv->kvec_d.resize(kv->get_nkstot());
90+
91+
// setup coordinates of k-points
92+
kv->kvec_c.resize(kv->get_nkstot());
12793
int i = 0;
128-
for (auto& kd: kv->kvec_d)
94+
for (auto& kd: kv->kvec_c)
12995
{
13096
kd.set(0.01 * i, 0.01 * i, 0.01 * i);
13197
++i;
13298
}
99+
100+
// write eigenvalues and occupations
133101
ModuleIO::write_istate_info(ekb, wg, *kv);
102+
103+
// check the output files
134104
std::ifstream ifs;
135-
ifs.open("istate.info");
105+
ifs.open("eig.txt");
136106
std::string str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
137-
EXPECT_THAT(str,
138-
testing::HasSubstr("BAND Spin up Energy(ev) Occupation Spin down Energy(ev) "
139-
" Occupation Kpoint = 50"));
140-
EXPECT_THAT(
141-
str,
142-
testing::HasSubstr(
143-
"4 2.04085 0 2.04085 0"));
144-
EXPECT_THAT(str, testing::HasSubstr("(0.49 0.49 0.49)"));
107+
EXPECT_THAT(str, testing::HasSubstr("Electronic state energy (eV) and occupations"));
108+
EXPECT_THAT(str, testing::HasSubstr("spin=1 k-point=1/10 Cartesian=0.0000000 0.0000000 0.0000000 (299 plane wave)"));
109+
EXPECT_THAT(str, testing::HasSubstr("1 2.040854700000000 0.000000000000000"));
145110
ifs.close();
146-
remove("istate.info");
111+
remove("eig.txt");
147112
}
148113

149114
#ifdef __MPI

source/module_io/write_istate_info.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ void ModuleIO::write_istate_info(const ModuleBase::matrix &ekb,const ModuleBase:
4242
ModuleBase::WARNING_QUIT("ModuleIO::write_istate_info", "Eigenvalues are too large!");
4343
}
4444

45-
4645
std::vector<int> ngk_tot = kv.ngk;
4746

4847
#ifdef __MPI
@@ -73,7 +72,9 @@ void ModuleIO::write_istate_info(const ModuleBase::matrix &ekb,const ModuleBase:
7372
#ifdef __MPI
7473
MPI_Barrier(MPI_COMM_WORLD);
7574
#endif
75+
7676
bool ip_flag = PARAM.inp.out_alllog || (GlobalV::RANK_IN_POOL == 0 && GlobalV::MY_BNDGROUP == 0);
77+
7778
if (GlobalV::MY_POOL == ip && ip_flag)
7879
{
7980
std::ofstream ofs_eig(filename.c_str(), std::ios::app);

0 commit comments

Comments
 (0)