Skip to content

Commit e512afe

Browse files
authored
Update read_pp_upf201.cpp
use std::stoi to exchange atof use try{ } catch structure to tackle with the abnormal number
1 parent 9f550b3 commit e512afe

1 file changed

Lines changed: 46 additions & 9 deletions

File tree

source/source_cell/read_pp_upf201.cpp

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
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

Comments
 (0)