31#include <rapidxml.hpp>
39 :
file_(filename.c_str()),
41 std::istreambuf_iterator<char>()) {
61 root_node_->first_node(
"norm_conserving_semilocal_pseudopotential");
97 return root_node_->first_node(
"description")->value();
105 return value<int>(
root_node_->first_node(
"atomic_number"));
111 return value<double>(
pseudo_node_->first_node(
"valence_charge"));
126 assert(np % nl == 0);
137 return value<double>(
pseudo_node_->first_node(
"rquad"));
141 return value<double>(
pseudo_node_->first_node(
"mesh_spacing"));
145 rapidxml::xml_node<> *node =
152 return value<int>(node->first_attribute(
"size"));
156 rapidxml::xml_node<> *node =
pseudo_node_->first_node(
"local_potential");
162 int size = value<int>(node->first_attribute(
"size"));
163 potential.resize(
size);
164 std::istringstream stst(node->value());
165 for (
int ii = 0; ii <
size; ii++) {
166 stst >> potential[ii];
176 rapidxml::xml_node<> *node =
pseudo_node_->first_node(
"projector");
179 node = node->next_sibling(
"projector");
195 rapidxml::xml_node<> *node =
pseudo_node_->first_node(
"projector");
198 int read_l = value<int>(node->first_attribute(
"l"));
201 node = node->next_sibling(
"projector");
207 rapidxml::xml_node<> *node =
pseudo_node_->first_node(
"projector");
210 int read_l = value<int>(node->first_attribute(
"l"));
213 node = node->next_sibling(
"projector");
227 rapidxml::xml_node<> *node =
pseudo_node_->first_node(tag.c_str());
230 int read_l = value<int>(node->first_attribute(
"l"));
231 int read_i = value<int>(node->first_attribute(
"i")) - 1;
232 if (
l == read_l &&
i == read_i)
234 node = node->next_sibling(tag.c_str());
237 assert(node != NULL);
239 int size = value<int>(node->first_attribute(
"size"));
241 std::istringstream stst(node->value());
242 for (
int ii = 0; ii <
size; ii++)
247 rapidxml::xml_node<> *node =
pseudo_node_->first_node(
"d_ij");
250 int read_l = value<int>(node->first_attribute(
"l"));
251 int read_i = value<int>(node->first_attribute(
"i")) - 1;
252 int read_j = value<int>(node->first_attribute(
"j")) - 1;
253 if (
l == read_l &&
i == read_i &&
j == read_j)
255 node = node->next_sibling(
"d_ij");
258 assert(node != NULL);
260 return value<double>(node);
264 rapidxml::xml_node<> *node =
pseudo_node_->first_node(
"projector");
267 int read_l = value<int>(node->first_attribute(
"l"));
270 node = node->next_sibling(
"projector");
273 return node->first_node(
"radial_function") != NULL;
277 rapidxml::xml_node<> *node =
pseudo_node_->first_node(
"projector");
280 int read_l = value<int>(node->first_attribute(
"l"));
283 node = node->next_sibling(
"projector");
286 assert(node != NULL);
287 assert(node->first_node(
"radial_function"));
289 int size = value<int>(node->first_attribute(
"size"));
290 function.resize(
size);
291 std::istringstream stst(node->first_node(
"radial_function")->value());
292 for (
int ii = 0; ii <
size; ii++) {
293 stst >> function[ii];
298 rapidxml::xml_node<> *node =
pseudo_node_->first_node(
"projector");
301 int read_l = value<int>(node->first_attribute(
"l"));
304 node = node->next_sibling(
"projector");
307 assert(node != NULL);
308 assert(node->first_node(
"radial_potential"));
310 int size = value<int>(node->first_attribute(
"size"));
311 function.resize(
size);
312 std::istringstream stst(node->first_node(
"radial_potential")->value());
313 for (
int ii = 0; ii <
size; ii++) {
314 stst >> function[ii];
321 rapidxml::xml_node<> *node =
pseudo_node_->first_node(
"rho_nlcc");
323 int size = value<int>(node->first_attribute(
"size"));
325 std::istringstream stst(node->value());
326 for (
int ii = 0; ii <
size; ii++) {
331 void beta(
int index,
int &
l, std::vector<double> &proj)
const {
332 rapidxml::xml_node<> *node =
pseudo_node_->first_node(
"beta");
335 node = node->next_sibling(
"beta");
337 assert(node != NULL);
339 l = value<int>(node->first_attribute(
"l"));
340 int size = value<int>(node->first_attribute(
"size"));
342 std::istringstream stst(node->value());
343 for (
int ii = 0; ii <
size; ii++) {
349 rapidxml::xml_node<> *node =
pseudo_node_->first_node(
"dnm_zero");
350 std::istringstream stst(node->value());
362 rapidxml::xml_node<> *node =
pseudo_node_->first_node(
"rinner");
367 rapidxml::xml_node<> *node =
pseudo_node_->first_node(
"rinner");
369 assert(node != NULL);
371 int size = value<int>(node->first_attribute(
"size"));
373 std::istringstream stst(node->value());
374 for (
int ii = 0; ii <
size; ii++) {
379 void qnm(
int index,
int &l1,
int &l2,
int &n,
int &m,
380 std::vector<double> &
val)
const {
381 rapidxml::xml_node<> *node =
pseudo_node_->first_node(
"qnm");
384 node = node->next_sibling(
"qnm");
386 assert(node != NULL);
388 n = value<int>(node->first_attribute(
"n"));
389 m = value<int>(node->first_attribute(
"m"));
390 l1 = value<int>(node->first_attribute(
"l1"));
391 l2 = value<int>(node->first_attribute(
"l2"));
393 int size = value<int>(node->first_attribute(
"size"));
395 std::istringstream stst(node->value());
396 for (
int ii = 0; ii <
size; ii++) {
402 rapidxml::xml_node<> *node =
pseudo_node_->first_node(
"qfcoeff");
405 int read_index = value<int>(node->first_attribute(
"i"));
406 int read_ltot = value<int>(node->first_attribute(
"ltot"));
407 if (read_index ==
index && read_ltot == ltot)
409 node = node->next_sibling(
"qfcoeff");
412 assert(node != NULL);
414 int size = value<int>(node->first_attribute(
"size"));
416 std::istringstream stst(node->value());
417 for (
int ii = 0; ii <
size; ii++) {
424 rapidxml::xml_node<> *node =
pseudo_node_->first_node(
"projector");
426 int read_l = value<int>(node->first_attribute(
"l"));
429 node = node->next_sibling(
"projector");
#define MAX_L
Definition: base.hpp:27
std::string filename_
Definition: base.hpp:175
virtual void density(std::vector< double > &val) const
Definition: base.hpp:153
pseudopotential::type type_
Definition: base.hpp:185
int lmax_
Definition: base.hpp:186
virtual int lmax() const
Definition: base.hpp:91
static std::string trim(std::string str, const std::string &chars="\t\n\v\f\r ")
Definition: element.hpp:140
bool has_nlcc() const
Definition: qso.hpp:318
std::string description() const
Definition: qso.hpp:96
void projector(int l, int i, std::vector< double > &proj) const
Definition: qso.hpp:223
rapidxml::xml_node * root_node_
Definition: qso.hpp:439
void radial_function(int l, std::vector< double > &function) const
Definition: qso.hpp:276
bool has_rinner() const
Definition: qso.hpp:361
pseudopotential::format format() const
Definition: qso.hpp:90
int atomic_number() const
Definition: qso.hpp:104
int size() const
Definition: qso.hpp:94
int nbeta() const
Definition: qso.hpp:434
bool has_radial_function(int l) const
Definition: qso.hpp:263
void local_potential(std::vector< double > &potential) const
Definition: qso.hpp:155
std::ifstream file_
Definition: qso.hpp:436
int mesh_size() const
Definition: qso.hpp:144
void qfcoeff(int index, int ltot, std::vector< double > &val) const
Definition: qso.hpp:401
double rquad() const
Definition: qso.hpp:136
bool has_projectors(int l) const
Definition: qso.hpp:423
rapidxml::xml_node * pseudo_node_
Definition: qso.hpp:440
std::string symbol() const
Definition: qso.hpp:100
int llocal() const
Definition: qso.hpp:114
std::vector< char > buffer_
Definition: qso.hpp:437
int nchannels() const
Definition: qso.hpp:122
double valence_charge() const
Definition: qso.hpp:110
double mesh_spacing() const
Definition: qso.hpp:140
double d_ij(int l, int i, int j) const
Definition: qso.hpp:246
void radial_potential(int l, std::vector< double > &function) const
Definition: qso.hpp:297
double mass() const
Definition: qso.hpp:108
void dnm_zero(int nbeta, std::vector< std::vector< double > > &dnm) const
Definition: qso.hpp:348
void qnm(int index, int &l1, int &l2, int &n, int &m, std::vector< double > &val) const
Definition: qso.hpp:379
int nprojectors() const
Definition: qso.hpp:170
int nprojectors_per_l(int l) const
Definition: qso.hpp:189
void nlcc_density(std::vector< double > &density) const
Definition: qso.hpp:320
void rinner(std::vector< double > &val) const
Definition: qso.hpp:366
void beta(int index, int &l, std::vector< double > &proj) const
Definition: qso.hpp:331
rapidxml::xml_document doc_
Definition: qso.hpp:438
int nquad() const
Definition: qso.hpp:134
qso(const std::string &filename)
Definition: qso.hpp:38
!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
format
Definition: base.hpp:49
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