31#include <rapidxml.hpp>
43 std::istreambuf_iterator<char>()) {
55 if (
root_node_->first_attribute(
"version")->value()[0] !=
'2')
59 ->first_attribute(
"pseudo_type")
62 if (pseudo_type ==
"NC" || pseudo_type ==
"SL") {
64 }
else if (pseudo_type ==
"USPP") {
66 }
else if (pseudo_type ==
"PAW") {
76 rapidxml::xml_base<> *xmin =
77 root_node_->first_node(
"PP_MESH")->first_attribute(
"xmin");
80 if (xmin && fabs(value<double>(xmin)) > 1.0e-10)
83 rapidxml::xml_node<> *node =
84 root_node_->first_node(
"PP_MESH")->first_node(
"PP_R");
88 rapidxml::xml_attribute<> *size_attr = node->first_attribute(
"size");
91 if (size_attr == NULL)
92 size_attr =
root_node_->first_node(
"PP_MESH")->first_attribute(
"mesh");
94 if (size_attr == NULL)
97 int size = value<int>(size_attr);
100 std::istringstream stst(node->value());
102 for (
int ii = 0; ii <
size; ii++)
105 assert(fabs(
grid_[0]) <= 1e-10);
109 rapidxml::xml_node<> *node =
110 root_node_->first_node(
"PP_MESH")->first_node(
"PP_RAB");
117 std::istringstream stst(node->value());
119 for (
int ii = 0; ii <
size; ii++)
129 std::vector<bool> has_l(
MAX_L,
false);
138 for (
int iproj = 0; iproj <
nprojectors(); iproj++) {
139 std::ostringstream tag;
140 tag <<
"PP_BETA." << iproj + 1;
141 rapidxml::xml_node<> *node =
142 root_node_->first_node(
"PP_NONLOCAL")->first_node(tag.str().c_str());
146 int read_l = value<int>(node->first_attribute(
"angular_momentum"));
150 has_l[read_l] =
true;
155 for (
int jproj = 0; jproj < iproj; jproj++)
172 rapidxml::xml_node<> *node =
173 root_node_->first_node(
"PP_NONLOCAL")->first_node(
"PP_DIJ");
179 for (
unsigned kk = 0; kk <
dij_.size(); kk++)
182 std::istringstream stst(node->value());
189 assert(fabs(
val) < 1.0e-10);
207 return root_node_->first_node(
"PP_INFO")->value();
212 ->first_attribute(
"element")
227 return value<double>(
228 root_node_->first_node(
"PP_HEADER")->first_attribute(
"z_valence"));
233 ->first_attribute(
"functional")
235 if (functional ==
"PBE")
237 if (functional ==
"PBESOL")
239 if (functional ==
"SLA PW NOGX NOGC")
241 if (functional ==
"BLYP")
248 ->first_attribute(
"functional")
250 if (functional ==
"PBE")
252 if (functional ==
"PBESOL")
254 if (functional ==
"SLA PW NOGX NOGC")
256 if (functional ==
"BLYP")
262 rapidxml::xml_node<> *node =
root_node_->first_node(
"PP_LOCAL");
269 std::istringstream stst(node->value());
270 for (
int ii = 0; ii <
size; ii++) {
282 root_node_->first_node(
"PP_HEADER")->first_attribute(
"number_of_proj"));
288 for (
int jproj = 0; jproj <
nprojectors(); jproj++)
290 nchannel = std::max(
proj_c_[jproj]+1, nchannel);
295 rapidxml::xml_node<> *node = NULL;
301 std::stringstream tag;
302 tag <<
"PP_BETA." << iproj+1;
303 node =
root_node_->first_node(
"PP_NONLOCAL")->first_node(tag.str().c_str());
310 std::istringstream stst(node->value());
311 for (
int ii = 0; ii <
size; ii++)
317 proj[ii] /=
grid_[ii];
336 rapidxml::xml_node<> *node =
root_node_->first_node(
"PP_NLCC");
343 std::istringstream stst(node->value());
344 for (
int ii = 0; ii <
size; ii++)
356 void beta(
int iproj,
int &
l, std::vector<double> &proj)
const {
357 rapidxml::xml_node<> *node = NULL;
359 std::stringstream tag;
360 tag <<
"PP_BETA." << iproj + 1;
361 node =
root_node_->first_node(
"PP_NONLOCAL")->first_node(tag.str().c_str());
365 l = value<int>(node->first_attribute(
"angular_momentum"));
370 std::istringstream stst(node->value());
371 for (
int ii = 0; ii <
size; ii++)
377 proj[ii] /=
grid_[ii];
383 void dnm_zero(
int nbeta, std::vector<std::vector<double>> &dnm)
const {
385 for (
int i = 0;
i < nbeta;
i++) {
386 dnm[
i].resize(nbeta);
387 for (
int j = 0;
j < nbeta;
j++) {
396 rapidxml::xml_node<> *node =
root_node_->first_node(
"PP_RHOATOM");
403 std::istringstream stst(node->value());
404 for (
int ii = 0; ii <
size; ii++)
417 root_node_->first_node(
"PP_HEADER")->first_attribute(
"number_of_wfc"));
421 std::vector<double> &proj)
const {
422 rapidxml::xml_node<> *node = NULL;
424 std::stringstream tag;
425 tag <<
"PP_CHI." <<
index + 1;
426 node =
root_node_->first_node(
"PP_PSWFC")->first_node(tag.str().c_str());
431 if (node->first_attribute(
"n")) {
432 n = value<int>(node->first_attribute(
"n"));
434 std::string label = node->first_attribute(
"label")->value();
435 n = atoi(label.substr(0, 1).c_str());
438 l = value<int>(node->first_attribute(
"l"));
440 occ = value<double>(node->first_attribute(
"occupation"));
445 std::istringstream stst(node->value());
446 for (
int ii = 0; ii <
size; ii++)
452 proj[ii] /=
grid_[ii];
464 for (
int iproj = 0; iproj <
nprojectors(); iproj++) {
465 std::stringstream tag;
466 tag <<
"PP_RELBETA." << iproj + 1;
468 rapidxml::xml_node<> *node =
469 root_node_->first_node(
"PP_SPIN_ORB")->first_node(tag.str().c_str());
472 std::string labell = node->first_attribute(
"lll")->value();
473 if(atoi(labell.c_str()) ==
l &&
proj_c_[iproj] == ic){
474 std::string labelj = node->first_attribute(
"jjj")->value();
475 double j = atof(labelj.c_str());
477 return lrint(
j * 2.0);
488 std::stringstream tag;
489 tag <<
"PP_RELWFC." << ii;
491 rapidxml::xml_node<> *node =
492 root_node_->first_node(
"PP_SPIN_ORB")->first_node(tag.str().c_str());
495 std::string label = node->first_attribute(
"jchi")->value();
496 double j = atof(label.c_str());
498 return lrint(
j * 2.0);
503 int get_size(
const rapidxml::xml_node<> *node)
const {
506 rapidxml::xml_attribute<> *size_attr = node->first_attribute(
"size");
508 if (size_attr != NULL)
509 size = value<int>(size_attr);
#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
double mass() const
Definition: upf2.hpp:221
std::vector< char > buffer_
Definition: upf2.hpp:515
int nprojectors() const
Definition: upf2.hpp:280
std::string description() const
Definition: upf2.hpp:206
int projector_2j(int l, int ic) const
Definition: upf2.hpp:459
rapidxml::xml_document doc_
Definition: upf2.hpp:516
pseudopotential::format format() const
Definition: upf2.hpp:200
bool has_nlcc() const
Definition: upf2.hpp:333
void nlcc_density(std::vector< double > &density) const
Definition: upf2.hpp:335
void local_potential(std::vector< double > &potential) const
Definition: upf2.hpp:261
bool has_total_angular_momentum() const
Definition: upf2.hpp:352
std::ifstream file_
Definition: upf2.hpp:514
bool has_density() const
Definition: upf2.hpp:393
void density(std::vector< double > &val) const
Definition: upf2.hpp:395
std::vector< int > proj_c_
Definition: upf2.hpp:519
pseudopotential::exchange exchange() const
Definition: upf2.hpp:231
double valence_charge() const
Definition: upf2.hpp:226
int size() const
Definition: upf2.hpp:204
int nprojectors_per_l(int l) const
Definition: upf2.hpp:285
void dnm_zero(int nbeta, std::vector< std::vector< double > > &dnm) const
Definition: upf2.hpp:383
rapidxml::xml_node * root_node_
Definition: upf2.hpp:517
void projector(int l, int i, std::vector< double > &proj) const
Definition: upf2.hpp:294
int nwavefunctions() const
Definition: upf2.hpp:415
std::string symbol() const
Definition: upf2.hpp:210
int get_size(const rapidxml::xml_node<> *node) const
Definition: upf2.hpp:503
std::vector< int > proj_l_
Definition: upf2.hpp:518
upf2(const std::string &filename, bool uniform_grid=false)
Definition: upf2.hpp:40
pseudopotential::correlation correlation() const
Definition: upf2.hpp:246
void radial_function(int l, std::vector< double > &function) const
Definition: upf2.hpp:325
bool has_radial_function(int l) const
Definition: upf2.hpp:323
void wavefunction(int index, int &n, int &l, double &occ, std::vector< double > &proj) const
Definition: upf2.hpp:420
int atomic_number() const
Definition: upf2.hpp:216
int wavefunction_2j(int ii) const
Definition: upf2.hpp:486
void radial_potential(int l, std::vector< double > &function) const
Definition: upf2.hpp:329
void beta(int iproj, int &l, std::vector< double > &proj) const
Definition: upf2.hpp:356
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 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