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