31#include <rapidxml.hpp>
43 std::istreambuf_iterator<char>()) {
50 std::istringstream header(
doc_.first_node(
"PP_HEADER")->value());
55 header >> version_number;
56 getline(header, line);
60 getline(header, line);
63 header >> pseudo_type;
64 getline(header, line);
67 getline(header, line);
72 getline(header, line);
75 getline(header, line);
78 getline(header, line);
81 getline(header, line);
85 getline(header, line);
89 getline(header, line);
91 std::transform(pseudo_type.begin(), pseudo_type.end(), pseudo_type.begin(),
94 if (pseudo_type ==
"nc" || pseudo_type ==
"sl") {
96 }
else if (pseudo_type ==
"uspp") {
98 }
else if (pseudo_type ==
"paw") {
106 rapidxml::xml_node<> *node =
107 doc_.first_node(
"PP_MESH")->first_node(
"PP_R");
110 std::istringstream stst(node->value());
124 for (
int ii = 0; ii <
size - 1; ii++)
127 assert(fabs(
grid_[0]) <= 1e-10);
135 rapidxml::xml_node<> *node =
136 doc_.first_node(
"PP_MESH")->first_node(
"PP_R");
139 std::istringstream stst(node->value());
144 for (
int ii = 0; ii <
size; ii++)
154 rapidxml::xml_node<> *node =
155 doc_.first_node(
"PP_NONLOCAL")->first_node(
"PP_BETA");
157 std::vector<bool> has_l(
MAX_L,
false);
165 std::istringstream stst(node->value());
169 stst >> read_i >> read_l;
173 assert(iproj == read_i);
176 has_l[read_l] =
true;
179 for (
int jproj = 0; jproj < iproj; jproj++)
185 node = node->next_sibling(
"PP_BETA");
199 rapidxml::xml_node<> *node =
200 doc_.first_node(
"PP_NONLOCAL")->first_node(
"PP_DIJ");
206 for (
unsigned kk = 0; kk <
dij_.size(); kk++)
209 std::istringstream stst(node->value());
216 for (
int kk = 0; kk < nnonzero; kk++) {
219 stst >> ii >> jj >>
val;
238 return doc_.first_node(
"PP_INFO")->value();
280 rapidxml::xml_node<> *node =
doc_.first_node(
"PP_LOCAL");
284 potential.resize(
grid_.size());
285 std::istringstream stst(node->value());
301 for (
int jproj = 0; jproj <
nprojectors(); jproj++)
303 nchannel = std::max(
proj_c_[jproj]+1, nchannel);
311 rapidxml::xml_node<> *node =
312 doc_.first_node(
"PP_NONLOCAL")->first_node(
"PP_BETA");
319 node = node->next_sibling(
"PP_BETA");
326 std::istringstream stst(node->value());
328 int read_i, read_l,
size;
330 stst >> read_i >> read_l;
333 assert(read_l ==
proj_l_[iproj]);
341 proj.resize(
grid_.size());
343 for (
int ii = 0; ii <
size; ii++)
350 for (
unsigned ii = 1; ii < proj.size(); ii++)
351 proj[ii] /= 2.0 *
grid_[ii];
370 rapidxml::xml_node<> *node =
doc_.first_node(
"PP_NLCC");
372 std::istringstream stst(node->value());
387 rapidxml::xml_node<> *node =
doc_.first_node(
"PP_RHOATOM");
392 std::istringstream stst(node->value());
397 for (
unsigned ii = 1; ii <
val.size(); ii++)
407 std::vector<double> &proj)
const {
408 rapidxml::xml_node<> *node =
doc_.first_node(
"PP_PSWFC");
412 std::istringstream stst(node->value());
417 for (
int ii = 0; ii <
index; ii++) {
427 stst >> label >>
l >> occ;
433 n = atoi(label.substr(0, 1).c_str());
436 proj.resize(
grid_.size());
444 proj[ii] /=
grid_[ii];
451 return doc_.first_node(
"PP_ADDINFO");
459 rapidxml::xml_node<> *node =
doc_.first_node(
"PP_ADDINFO");
462 std::istringstream stst(node->value());
475 assert(read_l ==
proj_l_[iproj]);
480 return lrint(read_j * 2.0);
495 rapidxml::xml_node<> *node =
doc_.first_node(
"PP_ADDINFO");
498 std::istringstream stst(node->value());
501 for (
int iwf = 0; iwf < ii; iwf++) {
505 stst >> label >> n >>
l >>
j >> occ;
508 return lrint(
j * 2.0);
#define MAX_L
Definition: base.hpp:27
std::vector< double > grid_
Definition: anygrid.hpp:81
double mesh_spacing() const
Definition: anygrid.hpp:34
int mesh_size_
Definition: anygrid.hpp:83
std::vector< double > grid_weights_
Definition: anygrid.hpp:82
void interpolate(std::vector< double > &function) const
Definition: anygrid.hpp:61
std::string filename_
Definition: base.hpp:175
pseudopotential::type type_
Definition: base.hpp:185
int lmax_
Definition: base.hpp:186
Definition: element.hpp:34
double mass() const
Definition: element.hpp:73
int atomic_number() const
Definition: element.hpp:71
static std::string trim(std::string str, const std::string &chars="\t\n\v\f\r ")
Definition: element.hpp:140
int nwavefunctions() const
Definition: upf1.hpp:404
bool has_density() const
Definition: upf1.hpp:384
std::vector< char > buffer_
Definition: upf1.hpp:513
int nprojectors_
Definition: upf1.hpp:520
int nprojectors_per_l(int l) const
Definition: upf1.hpp:298
std::string description() const
Definition: upf1.hpp:237
void local_potential(std::vector< double > &potential) const
Definition: upf1.hpp:279
int nwavefunctions_
Definition: upf1.hpp:519
double valence_charge() const
Definition: upf1.hpp:253
std::vector< int > proj_l_
Definition: upf1.hpp:521
std::ifstream file_
Definition: upf1.hpp:512
std::string symbol() const
Definition: upf1.hpp:241
pseudopotential::correlation correlation() const
Definition: upf1.hpp:267
pseudopotential::format format() const
Definition: upf1.hpp:231
bool has_total_angular_momentum() const
Definition: upf1.hpp:450
double mass() const
Definition: upf1.hpp:248
void density(std::vector< double > &val) const
Definition: upf1.hpp:386
std::vector< int > proj_c_
Definition: upf1.hpp:522
bool has_nlcc() const
Definition: upf1.hpp:367
bool has_radial_function(int l) const
Definition: upf1.hpp:357
int projector_2j(int l, int ic) const
Definition: upf1.hpp:454
rapidxml::xml_document doc_
Definition: upf1.hpp:514
upf1(const std::string &filename, bool uniform_grid=false)
Definition: upf1.hpp:40
int nprojectors() const
Definition: upf1.hpp:296
double zval_
Definition: upf1.hpp:518
int atomic_number() const
Definition: upf1.hpp:243
void radial_potential(int l, std::vector< double > &function) const
Definition: upf1.hpp:363
pseudopotential::exchange exchange() const
Definition: upf1.hpp:255
void nlcc_density(std::vector< double > &density) const
Definition: upf1.hpp:369
void projector(int l, int i, std::vector< double > &proj) const
Definition: upf1.hpp:308
int wavefunction_2j(int ii) const
Definition: upf1.hpp:491
void wavefunction(int index, int &n, int &l, double &occ, std::vector< double > &proj) const
Definition: upf1.hpp:406
std::string xc_functional_
Definition: upf1.hpp:517
int size() const
Definition: upf1.hpp:235
void radial_function(int l, std::vector< double > &function) const
Definition: upf1.hpp:359
std::string symbol_
Definition: upf1.hpp:516
double d_ij(int l, int i, int j) const
Definition: upf.hpp:38
int llocal_
Definition: upf.hpp:80
void extrapolate_first_point(std::vector< double > &function_) const
Definition: upf.hpp:59
std::vector< double > dij_
Definition: upf.hpp:79
int nchannels() const
Definition: upf.hpp:49
int start_point_
Definition: upf.hpp:81
int nchannels_
Definition: upf.hpp:82
!The assertions are ignored if the code is compiled in not debug when !prints out the assertion string
Definition: global.h:58
void const fint const fint * val
Definition: iihash_low.cc:41
Definition: anygrid.hpp:27
correlation
Definition: base.hpp:74
format
Definition: base.hpp:49
@ UNSUPPORTED_TYPE_ULTRASOFT
exchange
Definition: base.hpp:64
ptrdiff_t l
Definition: operate_inc.c:51
ptrdiff_t j
Definition: operate_inc.c:51
const int *restrict index
Definition: operate_inc.c:52
void const fint * i
Definition: write_iter_low.cc:126