11#include " read_pp.h"
2+ #include < stdexcept>
23
34// qianrui rewrite it 2021-5-10
45// liuyu update 2023-09-17 add uspp support
@@ -307,31 +308,59 @@ void Pseudopot_upf::read_pseudo_upf201_header(std::ifstream& ifs, Atom_pseudo& p
307308 }
308309 else if (name[ip] == " total_psenergy" )
309310 {
310- pp.etotps = atof (val[ip].c_str ());
311+ try {
312+ pp.etotps = std::stod (val[ip]);
313+ } catch (const std::invalid_argument&) {
314+ ModuleBase::WARNING_QUIT (" read_pp_upf201" , " Invalid value for total_psenergy: " + val[ip]);
315+ }
311316 }
312317 else if (name[ip] == " wfc_cutoff" )
313318 {
314- pp.ecutwfc = atof (val[ip].c_str ());
319+ try {
320+ pp.ecutwfc = std::stod (val[ip]);
321+ } catch (const std::invalid_argument&) {
322+ ModuleBase::WARNING_QUIT (" read_pp_upf201" , " Invalid value for wfc_cutoff: " + val[ip]);
323+ }
315324 }
316325 else if (name[ip] == " rho_cutoff" )
317326 {
318- pp.ecutrho = atof (val[ip].c_str ());
327+ try {
328+ pp.ecutrho = std::stod (val[ip]);
329+ } catch (const std::invalid_argument&) {
330+ ModuleBase::WARNING_QUIT (" read_pp_upf201" , " Invalid value for rho_cutoff: " + val[ip]);
331+ }
319332 }
320333 else if (name[ip] == " l_max" )
321334 {
322- pp.lmax = atoi (val[ip].c_str ());
335+ try {
336+ pp.lmax = std::stoi (val[ip]);
337+ } catch (const std::invalid_argument&) {
338+ ModuleBase::WARNING_QUIT (" read_pp_upf201" , " Invalid value for l_max: " + val[ip]);
339+ }
323340 }
324341 else if (name[ip] == " l_max_rho" )
325342 {
326- this ->lmax_rho = atoi (val[ip].c_str ());
343+ try {
344+ this ->lmax_rho = std::stoi (val[ip]);
345+ } catch (const std::invalid_argument&) {
346+ ModuleBase::WARNING_QUIT (" read_pp_upf201" , " Invalid value for l_max_rho: " + val[ip]);
347+ }
327348 }
328349 else if (name[ip] == " l_local" )
329350 {
330- this ->lloc = atoi (val[ip].c_str ());
351+ try {
352+ this ->lloc = std::stoi (val[ip]);
353+ } catch (const std::invalid_argument&) {
354+ ModuleBase::WARNING_QUIT (" read_pp_upf201" , " Invalid value for l_local: " + val[ip]);
355+ }
331356 }
332357 else if (name[ip] == " mesh_size" )
333358 {
334- pp.mesh = atoi (val[ip].c_str ());
359+ try {
360+ pp.mesh = std::stoi (val[ip]);
361+ } catch (const std::invalid_argument&) {
362+ ModuleBase::WARNING_QUIT (" read_pp_upf201" , " Invalid value for mesh_size: " + val[ip]);
363+ }
335364 this ->mesh_changed = false ;
336365 if (pp.mesh % 2 == 0 )
337366 {
@@ -341,11 +370,19 @@ void Pseudopot_upf::read_pseudo_upf201_header(std::ifstream& ifs, Atom_pseudo& p
341370 }
342371 else if (name[ip] == " number_of_wfc" )
343372 {
344- pp.nchi = atoi (val[ip].c_str ());
373+ try {
374+ pp.nchi = std::stoi (val[ip]);
375+ } catch (const std::invalid_argument&) {
376+ ModuleBase::WARNING_QUIT (" read_pp_upf201" , " Invalid value for number_of_wfc: " + val[ip]);
377+ }
345378 }
346379 else if (name[ip] == " number_of_proj" )
347380 {
348- pp.nbeta = atoi (val[ip].c_str ());
381+ try {
382+ pp.nbeta = std::stoi (val[ip]);
383+ } catch (const std::invalid_argument&) {
384+ ModuleBase::WARNING_QUIT (" read_pp_upf201" , " Invalid value for number_of_proj: " + val[ip]);
385+ }
349386 }
350387 else
351388 {
0 commit comments