Skip to content

Commit 4e8a87c

Browse files
authored
test: update UT of read_pp_upf (#1834)
1 parent 234c599 commit 4e8a87c

File tree

9 files changed

+13267
-6
lines changed

9 files changed

+13267
-6
lines changed

source/module_cell/read_pp_upf201.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ int Pseudopot_upf::read_pseudo_upf201(std::ifstream &ifs)
5757
has_so = false;
5858
}
5959
else if(name[ip]=="has_wfc"){}
60-
else if(name[ip]=="has_gipaw"){}
60+
else if(name[ip]=="has_gipaw"){
61+
ONCVPSP = 0;
62+
}
6163
else if(name[ip]=="paw_as_gipaw"){
6264
ONCVPSP = 0;
6365
}

source/module_cell/test/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ remove_definitions(-D__CUDA)
44
remove_definitions(-D__ROCM)
55

66
AddTest(
7-
TARGET cell_read_pp
7+
TARGET cell_read_pp_upf
88
LIBS ${math_libs} base device
9-
SOURCES read_pp_test.cpp ../read_pp.cpp ../read_pp_upf201.cpp ../read_pp_upf100.cpp ../read_pp_vwr.cpp ../read_pp_blps.cpp ../../src_parallel/parallel_reduce.cpp ../../src_parallel/parallel_kpoints.cpp ../../src_parallel/parallel_global.cpp ../../src_parallel/parallel_common.cpp ../../module_io/output.cpp
9+
SOURCES read_pp_upf_test.cpp ../read_pp.cpp ../read_pp_upf201.cpp ../read_pp_upf100.cpp ../read_pp_vwr.cpp ../read_pp_blps.cpp ../../src_parallel/parallel_reduce.cpp ../../src_parallel/parallel_kpoints.cpp ../../src_parallel/parallel_global.cpp ../../src_parallel/parallel_common.cpp ../../module_io/output.cpp
1010
)
1111

1212
install(DIRECTORY support DESTINATION ${CMAKE_CURRENT_BINARY_DIR})

source/module_cell/test/read_pp_test.cpp renamed to source/module_cell/test/read_pp_upf_test.cpp

Lines changed: 164 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,19 @@
2626
* - read_pseudo_upf201_rab
2727
* - read_pseudo_upf201_dij
2828
* - read_pseudo_upf201_rhoatom
29-
* - ReadUSppErr
29+
* - ReadUSppErr100
3030
* - read_pseudo_nl
3131
* - read_pseudo_nlcc
32+
* - ultrasoft is not supported
33+
* - HeaderErr201
34+
* - ultrasoft and paw pp are not supported
35+
* - ReadUPF201MESH2
36+
* - a different "<PP_MESH" header in UPF file
37+
* - ReadUPF201FR
38+
* - read a full-relativistic pp
39+
* - XCWarning
40+
* - DFT functianal warning when mismatching between pp_file
41+
* - and GlobalV::dft_functional happens
3242
*/
3343

3444
#define private public
@@ -123,7 +133,7 @@ TEST_F(ReadPPTest, ReadUPF100)
123133
delete upf;
124134
}
125135

126-
TEST_F(ReadPPTest, ReadUSppErr)
136+
TEST_F(ReadPPTest, ReadUSppErr100)
127137
{
128138
Pseudopot_upf* upf = new Pseudopot_upf;
129139
std::ifstream ifs;
@@ -134,7 +144,7 @@ TEST_F(ReadPPTest, ReadUSppErr)
134144
::testing::ExitedWithCode(0),"");
135145
output = testing::internal::GetCapturedStdout();
136146
// test output on screening
137-
// EXPECT_THAT(output,testing::HasSubstr("this function is called"));
147+
// EXPECT_THAT(output,testing::HasSubstr("this function is called")); // read_pseudo_nlcc
138148
EXPECT_THAT(output,testing::HasSubstr("Ultra Soft Pseudopotential not available yet."));
139149
ifs.close();
140150
delete upf;
@@ -194,4 +204,155 @@ TEST_F(ReadPPTest, ReadUPF201)
194204
ifs.close();
195205
delete upf;
196206
}
207+
208+
TEST_F(ReadPPTest, HeaderErr2011)
209+
{
210+
Pseudopot_upf* upf = new Pseudopot_upf;
211+
std::ifstream ifs;
212+
// 1st
213+
ifs.open("./support/HeaderError1");
214+
//upf->read_pseudo_upf201(ifs);
215+
testing::internal::CaptureStdout();
216+
EXPECT_EXIT(upf->read_pseudo_upf201(ifs),
217+
::testing::ExitedWithCode(0),"");
218+
output = testing::internal::GetCapturedStdout();
219+
EXPECT_THAT(output,testing::HasSubstr("unknown pseudo type"));
220+
ifs.close();
221+
delete upf;
222+
}
223+
224+
TEST_F(ReadPPTest, HeaderErr2012)
225+
{
226+
Pseudopot_upf* upf = new Pseudopot_upf;
227+
std::ifstream ifs;
228+
// 2nd
229+
ifs.open("./support/HeaderError2");
230+
//upf->read_pseudo_upf201(ifs);
231+
testing::internal::CaptureStdout();
232+
EXPECT_EXIT(upf->read_pseudo_upf201(ifs),
233+
::testing::ExitedWithCode(0),"");
234+
output = testing::internal::GetCapturedStdout();
235+
EXPECT_THAT(output,testing::HasSubstr("ULTRASOFT PSEUDOPOTENTIAL IS NOT SUPPORTED"));
236+
ifs.close();
237+
delete upf;
238+
}
239+
240+
TEST_F(ReadPPTest, HeaderErr2013)
241+
{
242+
Pseudopot_upf* upf = new Pseudopot_upf;
243+
std::ifstream ifs;
244+
// 3rd
245+
ifs.open("./support/HeaderError3");
246+
//upf->read_pseudo_upf201(ifs);
247+
testing::internal::CaptureStdout();
248+
EXPECT_EXIT(upf->read_pseudo_upf201(ifs),
249+
::testing::ExitedWithCode(0),"");
250+
output = testing::internal::GetCapturedStdout();
251+
EXPECT_THAT(output,testing::HasSubstr("PAW PSEUDOPOTENTIAL IS NOT SUPPORTED"));
252+
ifs.close();
253+
delete upf;
254+
}
255+
256+
TEST_F(ReadPPTest, HeaderErr2014)
257+
{
258+
Pseudopot_upf* upf = new Pseudopot_upf;
259+
std::ifstream ifs;
260+
// 4th
261+
GlobalV::ofs_warning.open("warning.log");
262+
ifs.open("./support/HeaderError4");
263+
upf->read_pseudo_upf201(ifs);
264+
GlobalV::ofs_warning.close();
265+
ifs.close();
266+
ifs.open("warning.log");
267+
getline(ifs,output);
268+
EXPECT_THAT(output,testing::HasSubstr("arbitrary is not read in. Please add this parameter in read_pp_upf201.cpp if needed."));
269+
ifs.close();
270+
remove("warning.log");
271+
delete upf;
272+
}
273+
274+
TEST_F(ReadPPTest, ReadUPF201FR)
275+
{
276+
Pseudopot_upf* upf = new Pseudopot_upf;
277+
std::ifstream ifs;
278+
// this is a dojo full-relativisitic pp
279+
ifs.open("./support/C.upf");
280+
upf->read_pseudo_upf201(ifs);
281+
EXPECT_EQ(upf->psd,"C");
282+
EXPECT_TRUE(upf->has_so);
283+
EXPECT_TRUE(upf->nlcc);
284+
EXPECT_EQ(upf->mesh,1247);
285+
//RELBETA
286+
EXPECT_EQ(upf->nbeta,6);
287+
EXPECT_EQ(upf->lll[0],0);
288+
EXPECT_EQ(upf->lll[1],0);
289+
EXPECT_EQ(upf->lll[2],1);
290+
EXPECT_EQ(upf->lll[3],1);
291+
EXPECT_EQ(upf->lll[4],1);
292+
EXPECT_EQ(upf->lll[5],1);
293+
EXPECT_DOUBLE_EQ(upf->jjj[0],0.5);
294+
EXPECT_DOUBLE_EQ(upf->jjj[1],0.5);
295+
EXPECT_DOUBLE_EQ(upf->jjj[2],0.5);
296+
EXPECT_DOUBLE_EQ(upf->jjj[3],1.5);
297+
EXPECT_DOUBLE_EQ(upf->jjj[4],0.5);
298+
EXPECT_DOUBLE_EQ(upf->jjj[5],1.5);
299+
//RELWFC
300+
EXPECT_EQ(upf->nwfc,3);
301+
EXPECT_EQ(upf->nn[0],1);
302+
EXPECT_EQ(upf->nn[1],2);
303+
EXPECT_EQ(upf->nn[2],2);
304+
EXPECT_EQ(upf->lchi[0],0);
305+
EXPECT_EQ(upf->lchi[1],1);
306+
EXPECT_EQ(upf->lchi[2],1);
307+
EXPECT_DOUBLE_EQ(upf->jchi[0],0.5);
308+
EXPECT_DOUBLE_EQ(upf->jchi[1],1.5);
309+
EXPECT_DOUBLE_EQ(upf->jchi[2],0.5);
310+
//PSWFC
311+
EXPECT_EQ(upf->els[0],"2S");
312+
EXPECT_EQ(upf->lchi[0],0);
313+
EXPECT_DOUBLE_EQ(upf->oc[0],2.0);
314+
EXPECT_EQ(upf->els[1],"2P");
315+
EXPECT_EQ(upf->lchi[1],1);
316+
EXPECT_DOUBLE_EQ(upf->oc[1],1.333);
317+
EXPECT_EQ(upf->els[2],"2P");
318+
EXPECT_EQ(upf->lchi[2],1);
319+
EXPECT_DOUBLE_EQ(upf->oc[2],0.667);
320+
EXPECT_DOUBLE_EQ(upf->chi(0,0),2.0715339166E-12);
321+
EXPECT_DOUBLE_EQ(upf->chi(2,upf->mesh-1),1.1201306967E-03);
322+
//NLCC
323+
EXPECT_DOUBLE_EQ(upf->rho_atc[0],8.7234550809E-01);
324+
EXPECT_DOUBLE_EQ(upf->rho_atc[upf->mesh-1],0.0);
325+
ifs.close();
326+
delete upf;
327+
}
328+
329+
TEST_F(ReadPPTest, ReadUPF201MESH2)
330+
{
331+
Pseudopot_upf* upf = new Pseudopot_upf;
332+
std::ifstream ifs;
333+
// this pp file has gipaw, thus a different header
334+
ifs.open("./support/Fe.pbe-sp-mt_gipaw.UPF");
335+
upf->read_pseudo_upf201(ifs);
336+
EXPECT_EQ(upf->psd,"Fe");
337+
ifs.close();
338+
delete upf;
339+
}
340+
341+
TEST_F(ReadPPTest, XCWarning)
342+
{
343+
Pseudopot_upf* upf = new Pseudopot_upf;
344+
std::ifstream ifs;
345+
// this pp file has gipaw, thus a different header
346+
// dft_functional warning
347+
GlobalV::DFT_FUNCTIONAL="LDA";
348+
ifs.open("./support/Fe.pbe-sp-mt_gipaw.UPF");
349+
//upf->read_pseudo_upf201(ifs);
350+
testing::internal::CaptureStdout();
351+
EXPECT_NO_THROW(upf->read_pseudo_upf201(ifs));
352+
output = testing::internal::GetCapturedStdout();
353+
EXPECT_THAT(output,testing::HasSubstr("dft_functional readin is: LDA"));
354+
EXPECT_THAT(output,testing::HasSubstr("dft_functional in pseudopot file is: PBE"));
355+
ifs.close();
356+
delete upf;
357+
}
197358
#undef private

0 commit comments

Comments
 (0)