QMCPACK
SymmetryBuilder Class Reference

Builds the symmetry class. More...

+ Collaboration diagram for SymmetryBuilder:

Public Member Functions

 SymmetryBuilder ()
 Constructor. More...
 
 ~SymmetryBuilder ()
 
SymmetryGroupgetSymmetryGroup ()
 
void put (xmlNodePtr q)
 

Private Member Functions

void buildI (SymmetryGroup &I, std::vector< double > ctable, int cls)
 
void buildC2Vx (SymmetryGroup &C2, std::vector< double > ctable, int cls)
 
void buildC2Vy (SymmetryGroup &C2, std::vector< double > ctable, int cls)
 
void buildC2Vz (SymmetryGroup &C2, std::vector< double > ctable, int cls)
 
void buildD2Hx (SymmetryGroup &C2, std::vector< double > ctable, int cls)
 
void buildD2Hy (SymmetryGroup &C2, std::vector< double > ctable, int cls)
 
void buildD2Hz (SymmetryGroup &C2, std::vector< double > ctable, int cls)
 
void buildD2H ()
 
void buildC2V ()
 
void buildByHand (xmlNodePtr q)
 

Private Attributes

SymmetryGroup symgrp
 
std::string symname
 

Detailed Description

Builds the symmetry class.

Definition at line 85 of file SymmetryOperations.h.

Constructor & Destructor Documentation

◆ SymmetryBuilder()

SymmetryBuilder ( )
inline

Constructor.

Definition at line 90 of file SymmetryOperations.h.

90 {}

◆ ~SymmetryBuilder()

~SymmetryBuilder ( )
inline

Definition at line 92 of file SymmetryOperations.h.

92 {};

Member Function Documentation

◆ buildByHand()

void buildByHand ( xmlNodePtr  q)
inlineprivate

Definition at line 294 of file SymmetryOperations.h.

References OhmmsAttributeSet::add(), SymmetryGroup::addOperator(), APP_ABORT, qmcplusplus::app_log(), OhmmsAttributeSet::put(), SymmetryGroup::putClassCharacterTable(), putContent(), and SymmetryBuilder::symgrp.

Referenced by SymmetryBuilder::put().

295  {
296  int nClasses(0);
297  int nSymmetries(0);
298  xmlNodePtr kids = q->children;
299  xmlNodePtr symclssptr(NULL);
300  while (kids != NULL)
301  {
302  std::string cname((const char*)(kids->name));
303  if (cname == "symmetryclass")
304  {
305  symclssptr = kids;
306  OhmmsAttributeSet aAttrib;
307  aAttrib.add(nClasses, "classes");
308  aAttrib.add(nSymmetries, "operators");
309  aAttrib.add(nSymmetries, "symmetries");
310  aAttrib.put(kids);
311  }
312  kids = kids->next;
313  }
314  std::vector<std::vector<double>> CT;
315  std::vector<std::vector<double>> OPS;
316  std::vector<int> clCT;
317  kids = symclssptr->children;
318  while (kids != NULL)
319  {
320  std::string cname((const char*)(kids->name));
321  if (cname == "charactertable")
322  {
323  xmlNodePtr kids2 = kids->children;
324  while (kids2 != NULL)
325  {
326  std::string cname2((const char*)(kids2->name));
327  if (cname2 == "class")
328  {
329  std::string clss;
330  OhmmsAttributeSet oAttrib;
331  oAttrib.add(clss, "name");
332  oAttrib.put(kids2);
333  std::vector<double> c;
334  putContent(c, kids2);
335  CT.push_back(c);
336  }
337  kids2 = kids2->next;
338  }
339  }
340  kids = kids->next;
341  }
342  kids = symclssptr->children;
343  while (kids != NULL)
344  {
345  std::string cname((const char*)(kids->name));
346  if (cname == "symmetries")
347  {
348  xmlNodePtr kids2 = kids->children;
349  while (kids2 != NULL)
350  {
351  std::string cname2((const char*)(kids2->name));
352  if (cname2 == "operator")
353  {
354  int clss(-1);
355  OhmmsAttributeSet oAttrib;
356  oAttrib.add(clss, "class");
357  oAttrib.put(kids2);
358  if (clss == -1)
359  {
360  app_log() << " Must label class of operators" << std::endl;
361  APP_ABORT("SymmetryClass::put");
362  }
363  clCT.push_back(clss);
364  std::vector<double> c;
365  putContent(c, kids2);
366  OPS.push_back(c);
367  }
368  kids2 = kids2->next;
369  }
370  }
371  kids = kids->next;
372  }
373  //make operator matrices, associate them with the class and add them to the symmetry group.
374  for (int i = 0; i < OPS.size(); i++)
375  {
376  Matrix<double> op(3, 3);
377  for (int j = 0; j < 3; j++)
378  for (int k = 0; k < 3; k++)
379  op(j, k) = OPS[i][j * 3 + k];
380  symgrp.addOperator(op, CT[clCT[i] - 1], clCT[i]);
381  }
383  // for(int j=0; j<CT.size();j++) for(int k=0; k<CT[0].size();k++) app_log()<<CT[j][k]<<" ";
384  }
std::ostream & app_log()
Definition: OutputManager.h:65
bool put(xmlNodePtr cur)
assign attributes to the set
Definition: AttributeSet.h:55
class to handle a set of attributes of an xmlNode
Definition: AttributeSet.h:24
#define APP_ABORT(msg)
Widely used but deprecated fatal error macros from legacy code.
Definition: AppAbort.h:27
bool putContent(T &a, xmlNodePtr cur)
replaces a&#39;s value with the first "element" in the "string" returned by XMLNodeString{cur}.
Definition: libxmldefs.h:88
void putClassCharacterTable(std::vector< std::vector< double >> cct)
void add(PDT &aparam, const std::string &aname, std::vector< PDT > candidate_values={}, TagStatus status=TagStatus::OPTIONAL)
add a new attribute
Definition: AttributeSet.h:42
void addOperator(Matrix< double > op, std::vector< double > characterlist, int cls)

◆ buildC2V()

void buildC2V ( )
inlineprivate

Definition at line 267 of file SymmetryOperations.h.

References SymmetryBuilder::buildC2Vx(), SymmetryBuilder::buildC2Vy(), SymmetryBuilder::buildC2Vz(), SymmetryBuilder::buildI(), SymmetryGroup::putClassCharacterTable(), and SymmetryBuilder::symgrp.

Referenced by SymmetryBuilder::put().

268  {
269  //Character table
270  std::vector<std::vector<double>> CT(4, std::vector<double>(4, 0));
271  CT[0][0] = 1;
272  CT[0][1] = 1;
273  CT[0][2] = 1;
274  CT[0][3] = 1;
275  CT[1][0] = 1;
276  CT[1][1] = 1;
277  CT[1][2] = -1;
278  CT[1][3] = -1;
279  CT[2][0] = 1;
280  CT[2][1] = -1;
281  CT[2][2] = 1;
282  CT[2][3] = -1;
283  CT[3][0] = 1;
284  CT[3][1] = -1;
285  CT[3][2] = -1;
286  CT[3][3] = 1;
287  buildI(symgrp, CT[0], 0);
288  buildC2Vx(symgrp, CT[1], 1);
289  buildC2Vy(symgrp, CT[2], 2);
290  buildC2Vz(symgrp, CT[3], 3);
292  };
void buildC2Vx(SymmetryGroup &C2, std::vector< double > ctable, int cls)
void buildC2Vz(SymmetryGroup &C2, std::vector< double > ctable, int cls)
void buildI(SymmetryGroup &I, std::vector< double > ctable, int cls)
void putClassCharacterTable(std::vector< std::vector< double >> cct)
void buildC2Vy(SymmetryGroup &C2, std::vector< double > ctable, int cls)

◆ buildC2Vx()

void buildC2Vx ( SymmetryGroup C2,
std::vector< double >  ctable,
int  cls 
)
inlineprivate

Definition at line 136 of file SymmetryOperations.h.

References SymmetryGroup::addOperator().

Referenced by SymmetryBuilder::buildC2V().

137  {
138  Matrix<double> matrix_c2x(3, 3);
139  matrix_c2x[0][0] = -1;
140  matrix_c2x[1][1] = 1;
141  matrix_c2x[2][2] = -1;
142  C2.addOperator(matrix_c2x, ctable, cls);
143  };

◆ buildC2Vy()

void buildC2Vy ( SymmetryGroup C2,
std::vector< double >  ctable,
int  cls 
)
inlineprivate

Definition at line 144 of file SymmetryOperations.h.

References SymmetryGroup::addOperator().

Referenced by SymmetryBuilder::buildC2V().

145  {
146  Matrix<double> matrix_c2y(3, 3);
147  matrix_c2y[0][2] = 1;
148  matrix_c2y[1][1] = 1;
149  matrix_c2y[2][0] = 1;
150  C2.addOperator(matrix_c2y, ctable, cls);
151  };

◆ buildC2Vz()

void buildC2Vz ( SymmetryGroup C2,
std::vector< double >  ctable,
int  cls 
)
inlineprivate

Definition at line 152 of file SymmetryOperations.h.

References SymmetryGroup::addOperator().

Referenced by SymmetryBuilder::buildC2V().

153  {
154  Matrix<double> matrix_c2z(3, 3);
155  matrix_c2z[0][2] = -1;
156  matrix_c2z[1][1] = 1;
157  matrix_c2z[2][0] = -1;
158  C2.addOperator(matrix_c2z, ctable, cls);
159  };

◆ buildD2H()

void buildD2H ( )
inlineprivate

Definition at line 240 of file SymmetryOperations.h.

References SymmetryBuilder::buildD2Hx(), SymmetryBuilder::buildD2Hy(), SymmetryBuilder::buildD2Hz(), SymmetryBuilder::buildI(), SymmetryGroup::putClassCharacterTable(), and SymmetryBuilder::symgrp.

Referenced by SymmetryBuilder::put().

241  {
242  //Character table
243  std::vector<std::vector<double>> CT(4, std::vector<double>(4, 0));
244  CT[0][0] = 1;
245  CT[0][1] = 1;
246  CT[0][2] = 1;
247  CT[0][3] = 1;
248  CT[1][0] = 1;
249  CT[1][1] = 1;
250  CT[1][2] = -1;
251  CT[1][3] = -1;
252  CT[2][0] = 1;
253  CT[2][1] = -1;
254  CT[2][2] = 1;
255  CT[2][3] = -1;
256  CT[3][0] = 1;
257  CT[3][1] = -1;
258  CT[3][2] = -1;
259  CT[3][3] = 1;
260  buildI(symgrp, CT[0], 0);
261  buildD2Hx(symgrp, CT[1], 1);
262  buildD2Hy(symgrp, CT[2], 2);
263  buildD2Hz(symgrp, CT[3], 3);
265  };
void buildD2Hz(SymmetryGroup &C2, std::vector< double > ctable, int cls)
void buildD2Hx(SymmetryGroup &C2, std::vector< double > ctable, int cls)
void buildI(SymmetryGroup &I, std::vector< double > ctable, int cls)
void buildD2Hy(SymmetryGroup &C2, std::vector< double > ctable, int cls)
void putClassCharacterTable(std::vector< std::vector< double >> cct)

◆ buildD2Hx()

void buildD2Hx ( SymmetryGroup C2,
std::vector< double >  ctable,
int  cls 
)
inlineprivate

Definition at line 161 of file SymmetryOperations.h.

References SymmetryGroup::addOperator().

Referenced by SymmetryBuilder::buildD2H().

162  {
163  Matrix<double> matrix_c2x(3, 3);
164  matrix_c2x[0][0] = 1;
165  matrix_c2x[1][1] = -1;
166  matrix_c2x[2][2] = -1;
167  C2.addOperator(matrix_c2x, ctable, cls);
168  };

◆ buildD2Hy()

void buildD2Hy ( SymmetryGroup C2,
std::vector< double >  ctable,
int  cls 
)
inlineprivate

Definition at line 169 of file SymmetryOperations.h.

References SymmetryGroup::addOperator().

Referenced by SymmetryBuilder::buildD2H().

170  {
171  Matrix<double> matrix_c2y(3, 3);
172  matrix_c2y[0][0] = -1;
173  matrix_c2y[1][1] = 1;
174  matrix_c2y[2][2] = -1;
175  C2.addOperator(matrix_c2y, ctable, cls);
176  };

◆ buildD2Hz()

void buildD2Hz ( SymmetryGroup C2,
std::vector< double >  ctable,
int  cls 
)
inlineprivate

Definition at line 177 of file SymmetryOperations.h.

References SymmetryGroup::addOperator().

Referenced by SymmetryBuilder::buildD2H().

178  {
179  Matrix<double> matrix_c2z(3, 3);
180  matrix_c2z[0][0] = -1;
181  matrix_c2z[1][1] = -1;
182  matrix_c2z[2][2] = 1;
183  C2.addOperator(matrix_c2z, ctable, cls);
184  };

◆ buildI()

void buildI ( SymmetryGroup I,
std::vector< double >  ctable,
int  cls 
)
inlineprivate

Definition at line 128 of file SymmetryOperations.h.

References I.

Referenced by SymmetryBuilder::buildC2V(), and SymmetryBuilder::buildD2H().

129  {
130  Matrix<double> matrix_i(3, 3);
131  for (int i = 0; i < 3; i++)
132  matrix_i[i][i] = 1.0;
133  I.addOperator(matrix_i, ctable, cls);
134  };
std::complex< double > I

◆ getSymmetryGroup()

SymmetryGroup* getSymmetryGroup ( )
inline

Definition at line 94 of file SymmetryOperations.h.

References SymmetryBuilder::symgrp.

94 { return &symgrp; }

◆ put()

void put ( xmlNodePtr  q)
inline

Definition at line 96 of file SymmetryOperations.h.

References ParameterSet::add(), SymmetryBuilder::buildByHand(), SymmetryBuilder::buildC2V(), SymmetryBuilder::buildD2H(), ParameterSet::put(), and SymmetryBuilder::symname.

97  {
98  symname = "";
99  xmlNodePtr kids = q->children;
100  while (kids != NULL)
101  {
102  std::string cname((const char*)(kids->name));
103  if (cname == "symmetryclass")
104  {
105  ParameterSet aAttrib;
106  aAttrib.add(symname, "name");
107  aAttrib.put(kids);
108  }
109  kids = kids->next;
110  }
111  if (symname == "D2H")
112  buildD2H();
113  else if (symname == "C2V")
114  buildC2V();
115  else
116  {
117  buildByHand(q);
118  // app_log()<<"Symmetry Class "<< symname <<" not yet implemented"<< std::endl;
119  // APP_ABORT("SymmetryClass::put");
120  }
121  }
bool put(std::istream &is) override
read from std::istream
Definition: ParameterSet.h:42
class to handle a set of parameters
Definition: ParameterSet.h:27
void add(PDT &aparam, const std::string &aname_in, std::vector< PDT > candidate_values={}, TagStatus status=TagStatus::OPTIONAL)
add a new parameter corresponding to an xmlNode <parameter>

Member Data Documentation

◆ symgrp

◆ symname

std::string symname
private

Definition at line 126 of file SymmetryOperations.h.

Referenced by SymmetryBuilder::put().


The documentation for this class was generated from the following file: