QMCPACK
ECPotentialBuilder Struct Reference
+ Inheritance diagram for ECPotentialBuilder:
+ Collaboration diagram for ECPotentialBuilder:

Public Types

using RadialPotentialType = LocalECPotential::RadialPotentialType
 
using GridType = LocalECPotential::GridType
 
- Public Types inherited from MPIObjectBase
using mpi_comm_type = Communicate::mpi_comm_type
 
- Public Types inherited from QMCTraits
enum  { DIM = OHMMS_DIM, DIM_VGL = OHMMS_DIM + 2 }
 
using QTBase = QMCTypes< OHMMS_PRECISION, DIM >
 
using QTFull = QMCTypes< OHMMS_PRECISION_FULL, DIM >
 
using RealType = QTBase::RealType
 
using ComplexType = QTBase::ComplexType
 
using ValueType = QTBase::ValueType
 
using PosType = QTBase::PosType
 
using GradType = QTBase::GradType
 
using TensorType = QTBase::TensorType
 
using IndexType = OHMMS_INDEXTYPE
 define other types More...
 
using FullPrecRealType = QTFull::RealType
 
using FullPrecValueType = QTFull::ValueType
 
using PropertySetType = RecordNamedProperty< FullPrecRealType >
 define PropertyList_t More...
 
using PtclGrpIndexes = std::vector< std::pair< int, int > >
 

Public Member Functions

 ECPotentialBuilder (QMCHamiltonian &h, ParticleSet &ions, ParticleSet &els, TrialWaveFunction &psi, Communicate *c)
 constructor More...
 
 ~ECPotentialBuilder ()
 
bool put (xmlNodePtr cur)
 
void useSimpleTableFormat ()
 reimplement simple table format used by NonLocalPPotential More...
 
void useXmlFormat (xmlNodePtr cur)
 
- Public Member Functions inherited from MPIObjectBase
 MPIObjectBase (Communicate *c)
 constructor with communicator More...
 
int rank () const
 return the rank of the communicator More...
 
int getGroupID () const
 return the group id of the communicator More...
 
Communicate * getCommunicator () const
 return myComm More...
 
Communicate & getCommRef () const
 return a TEMPORARY reference to Communicate More...
 
mpi_comm_type getMPI () const
 return MPI communicator if one wants to use MPI directly More...
 
bool is_manager () const
 return true if the rank == 0 More...
 
const std::string & getName () const
 return the name More...
 
void setName (const std::string &aname)
 

Public Attributes

bool hasLocalPot
 
bool hasNonLocalPot
 
bool hasSOPot
 
bool hasL2Pot
 
bool use_exact_spin
 
QMCHamiltonian & targetH
 
ParticleSet & IonConfig
 
ParticleSet & targetPtcl
 
TrialWaveFunction & targetPsi
 
std::vector< RealType > localZeff
 
std::vector< std::unique_ptr< RadialPotentialType > > localPot
 
std::vector< std::unique_ptr< NonLocalECPComponent > > nonLocalPot
 
std::vector< std::unique_ptr< SOECPComponent > > soPot
 
std::vector< std::unique_ptr< L2RadialPotential > > L2Pot
 

Additional Inherited Members

- Protected Attributes inherited from MPIObjectBase
Communicate * myComm
 pointer to Communicate More...
 
std::string ClassName
 class Name More...
 
std::string myName
 name of the object More...
 

Detailed Description

Definition at line 28 of file ECPotentialBuilder.h.

Member Typedef Documentation

◆ GridType

Definition at line 31 of file ECPotentialBuilder.h.

◆ RadialPotentialType

Constructor & Destructor Documentation

◆ ECPotentialBuilder()

constructor

Parameters
ionsthe positions of the ions
elsthe positions of the electrons
psitrial wavefunction

Definition at line 33 of file ECPotentialBuilder.cpp.

38  : MPIObjectBase(c),
39  hasLocalPot(false),
40  hasNonLocalPot(false),
41  hasSOPot(false),
42  hasL2Pot(false),
43  targetH(h),
44  IonConfig(ions),
45  targetPtcl(els),
46  targetPsi(psi)
47 {}
MPIObjectBase(Communicate *c)
constructor with communicator

◆ ~ECPotentialBuilder()

~ECPotentialBuilder ( )
default

Member Function Documentation

◆ put()

bool put ( xmlNodePtr  cur)

create LocalECPotential

Definition at line 51 of file ECPotentialBuilder.cpp.

References OhmmsAttributeSet::add(), QMCHamiltonian::addOperator(), APP_ABORT, qmcplusplus::app_log(), ParticleSet::getLattice(), ParticleSet::getSpeciesSet(), SpeciesSet::getTotalNum(), ECPotentialBuilder::hasL2Pot, ECPotentialBuilder::hasLocalPot, ECPotentialBuilder::hasNonLocalPot, ECPotentialBuilder::hasSOPot, ECPotentialBuilder::IonConfig, ECPotentialBuilder::L2Pot, ECPotentialBuilder::localPot, ECPotentialBuilder::localZeff, ECPotentialBuilder::nonLocalPot, OhmmsAttributeSet::put(), ECPotentialBuilder::soPot, qmcplusplus::SUPERCELL_OPEN, ECPotentialBuilder::targetH, ECPotentialBuilder::targetPsi, ECPotentialBuilder::targetPtcl, ECPotentialBuilder::use_exact_spin, ECPotentialBuilder::useSimpleTableFormat(), and ECPotentialBuilder::useXmlFormat().

Referenced by HamiltonianFactory::addPseudoPotential().

52 {
53  if (localPot.empty())
54  {
55  int ng = IonConfig.getSpeciesSet().getTotalNum();
56  localZeff.resize(ng, 1);
57  localPot.resize(ng);
58  nonLocalPot.resize(ng);
59  soPot.resize(ng);
60  L2Pot.resize(ng);
61  }
62  std::string ecpFormat;
63  std::string NLPP_algo;
64  std::string use_DLA;
65  std::string pbc;
66  std::string forces;
67  std::string physicalSO;
68  std::string spin_integrator;
69 
70  OhmmsAttributeSet pAttrib;
71  pAttrib.add(ecpFormat, "format", {"table", "xml"});
72  pAttrib.add(NLPP_algo, "algorithm", {"batched", "non-batched"});
73  pAttrib.add(use_DLA, "DLA", {"no", "yes"});
74  pAttrib.add(pbc, "pbc", {"yes", "no"});
75  pAttrib.add(forces, "forces", {"no", "yes"});
76  pAttrib.add(physicalSO, "physicalSO", {"yes", "no"});
77  pAttrib.add(spin_integrator, "spin_integrator", {"exact", "simpson"});
78  pAttrib.put(cur);
79 
80  bool doForces = (forces == "yes") || (forces == "true");
81  if (use_DLA == "yes")
82  app_log() << " Using determinant localization approximation (DLA)" << std::endl;
83 
84  use_exact_spin = (spin_integrator == "exact") ? true : false;
85  if (ecpFormat == "xml")
86  {
87  useXmlFormat(cur);
88  }
89  else
90  {
92  }
93 
94  ///create LocalECPotential
95  bool usePBC = !(IonConfig.getLattice().SuperCellEnum == SUPERCELL_OPEN || pbc == "no");
96 
97 
98  if (hasLocalPot)
99  {
100  if (IonConfig.getLattice().SuperCellEnum == SUPERCELL_OPEN || pbc == "no")
101  {
102  std::unique_ptr<LocalECPotential> apot = std::make_unique<LocalECPotential>(IonConfig, targetPtcl);
103  for (int i = 0; i < localPot.size(); i++)
104  if (localPot[i])
105  apot->add(i, std::move(localPot[i]), localZeff[i]);
106  targetH.addOperator(std::move(apot), "LocalECP");
107  }
108  else
109  {
110  if (doForces)
111  app_log() << " Will compute forces in CoulombPBCAB.\n" << std::endl;
112  std::unique_ptr<CoulombPBCAB> apot = std::make_unique<CoulombPBCAB>(IonConfig, targetPtcl, doForces);
113  for (int i = 0; i < localPot.size(); i++)
114  {
115  if (localPot[i])
116  apot->add(i, std::move(localPot[i]));
117  }
118  targetH.addOperator(std::move(apot), "LocalECP");
119  }
120  }
121  if (hasNonLocalPot)
122  {
123  std::unique_ptr<NonLocalECPotential> apot =
124  std::make_unique<NonLocalECPotential>(IonConfig, targetPtcl, targetPsi, doForces, use_DLA == "yes");
125 
126  int nknot_max = 0;
127  // These are actually NonLocalECPComponents
128  for (int i = 0; i < nonLocalPot.size(); i++)
129  {
130  if (nonLocalPot[i])
131  {
132  nknot_max = std::max(nknot_max, nonLocalPot[i]->getNknot());
133  if (NLPP_algo == "batched")
134  nonLocalPot[i]->initVirtualParticle(targetPtcl);
135  apot->addComponent(i, std::move(nonLocalPot[i]));
136  }
137  }
138  app_log() << "\n Using NonLocalECP potential \n"
139  << " Maximum grid on a sphere for NonLocalECPotential: " << nknot_max << std::endl;
140  if (NLPP_algo == "batched")
141  app_log() << " Using batched ratio computing in NonLocalECP" << std::endl;
142 
143  targetH.addOperator(std::move(apot), "NonLocalECP");
144  }
145  if (hasSOPot)
146  {
147 #ifndef QMC_COMPLEX
148  APP_ABORT("SOECPotential evaluations require complex build. Rebuild with -D QMC_COMPLEX=1\n");
149 #endif
150  if (physicalSO == "yes")
151  app_log() << " Spin-Orbit potential included in local energy" << std::endl;
152  else if (physicalSO == "no")
153  app_log() << " Spin-Orbit potential is not included in local energy" << std::endl;
154  else
155  APP_ABORT("physicalSO must be set to yes/no. Unknown option given\n");
156 
157  std::unique_ptr<SOECPotential> apot = std::make_unique<SOECPotential>(IonConfig, targetPtcl, targetPsi, use_exact_spin);
158  int nknot_max = 0;
159  int sknot_max = 0;
160  for (int i = 0; i < soPot.size(); i++)
161  {
162  if (soPot[i])
163  {
164  nknot_max = std::max(nknot_max, soPot[i]->getNknot());
165  sknot_max = std::max(sknot_max, soPot[i]->getSknot());
166  if (NLPP_algo == "batched")
167  soPot[i]->initVirtualParticle(targetPtcl);
168  apot->addComponent(i, std::move(soPot[i]));
169  }
170  }
171  app_log() << "\n Using SOECP potential \n"
172  << " Maximum grid on a sphere for SOECPotential: " << nknot_max << std::endl;
173  if (use_exact_spin)
174  app_log() << " Using fast SOECP evaluation. Spin integration is exact" << std::endl;
175  else
176  app_log() << " Maximum grid for Simpson's rule for spin integral: " << sknot_max << std::endl;
177  if (NLPP_algo == "batched")
178  app_log() << " Using batched ratio computing in SOECP potential" << std::endl;
179  if (physicalSO == "yes")
180  targetH.addOperator(std::move(apot), "SOECP"); //default is physical operator
181  else
182  targetH.addOperator(std::move(apot), "SOECP", false);
183  }
184  if (hasL2Pot)
185  {
186  std::unique_ptr<L2Potential> apot = std::make_unique<L2Potential>(IonConfig, targetPtcl, targetPsi);
187  for (int i = 0; i < L2Pot.size(); i++)
188  if (L2Pot[i])
189  apot->add(i, std::move(L2Pot[i]));
190  app_log() << "\n Using L2 potential" << std::endl;
191  targetH.addOperator(std::move(apot), "L2");
192  }
193 
194  app_log().flush();
195  return true;
196 }
void addOperator(std::unique_ptr< OperatorBase > &&h, const std::string &aname, bool physical=true)
add an operator
std::ostream & app_log()
Definition: OutputManager.h:65
bool put(xmlNodePtr cur)
assign attributes to the set
Definition: AttributeSet.h:55
std::vector< std::unique_ptr< SOECPComponent > > soPot
int getTotalNum() const
return the number of species
Definition: SpeciesSet.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
std::vector< std::unique_ptr< RadialPotentialType > > localPot
std::vector< RealType > localZeff
SpeciesSet & getSpeciesSet()
retrun the SpeciesSet of this particle set
Definition: ParticleSet.h:231
void useSimpleTableFormat()
reimplement simple table format used by NonLocalPPotential
std::vector< std::unique_ptr< NonLocalECPComponent > > nonLocalPot
const auto & getLattice() const
Definition: ParticleSet.h:251
std::vector< std::unique_ptr< L2RadialPotential > > L2Pot
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

◆ useSimpleTableFormat()

void useSimpleTableFormat ( )

reimplement simple table format used by NonLocalPPotential

Definition at line 330 of file ECPotentialBuilder.cpp.

References qmcplusplus::app_error(), qmcplusplus::app_log(), ERRORMSG, ParticleSet::getSpeciesSet(), ECPotentialBuilder::hasLocalPot, ECPotentialBuilder::hasNonLocalPot, ECPotentialBuilder::IonConfig, ECPotentialBuilder::localPot, ECPotentialBuilder::nonLocalPot, OneDimNumGridFunctor< T >::put(), OneDimNumGridFunctor< T >::rmax(), and OneDimNumGridFunctor< T >::splint().

Referenced by ECPotentialBuilder::put().

331 {
332  SpeciesSet& Species(IonConfig.getSpeciesSet());
333  int ng(Species.getTotalNum());
334  int icharge(Species.addAttribute("charge"));
335  for (int ig = 0; ig < ng; ig++)
336  {
337  std::vector<RealType> grid_temp, pp_temp;
338  std::string species(Species.speciesName[ig]);
339  std::string fname = species + ".psf";
340  std::ifstream fin(fname.c_str(), std::ios_base::in);
341  if (!fin)
342  {
343  ERRORMSG("Could not open file " << fname)
344  exit(-1);
345  }
346  // Read Number of potentials (local and non) for this atom
347  int npotentials;
348  fin >> npotentials;
349  int lmax = -1;
350  int numnonloc = 0;
351  RealType rmax(0.0);
352  app_log() << " ECPotential for " << species << std::endl;
353  std::unique_ptr<NonLocalECPComponent> mynnloc;
354  using CubicSplineFuncType = OneDimCubicSpline<RealType>;
355  for (int ij = 0; ij < npotentials; ij++)
356  {
357  int angmom, npoints;
358  fin >> angmom >> npoints;
359  OneDimNumGridFunctor<RealType> inFunc;
360  inFunc.put(npoints, fin);
361  if (angmom < 0)
362  //local potential, input is rescale by -r/z
363  {
364  RealType zinv = -1.0 / Species(icharge, ig);
365  int ng = npoints - 1;
366  RealType rf = 5.0;
367  ng = static_cast<int>(rf * 100) + 1; //use 1e-2 resolution
368  auto agrid = std::make_unique<LinearGrid<RealType>>();
369  agrid->set(0, rf, ng);
370  std::vector<RealType> pp_temp(ng);
371  pp_temp[0] = 0.0;
372  for (int j = 1; j < ng; j++)
373  {
374  RealType r((*agrid)[j]);
375  pp_temp[j] = r * zinv * inFunc.splint(r);
376  }
377  pp_temp[ng - 1] = 1.0;
378  auto app = std::make_unique<RadialPotentialType>(std::move(agrid), pp_temp);
379  app->spline();
380  localPot[ig] = std::move(app);
381  app_log() << " LocalECP l=" << angmom << std::endl;
382  app_log() << " Linear grid=[0," << rf << "] npts=" << ng << std::endl;
383  hasLocalPot = true; //will create LocalECPotential
384  }
385  else
386  {
387  hasNonLocalPot = true; //will create NonLocalECPotential
388  if (!mynnloc)
389  mynnloc = std::make_unique<NonLocalECPComponent>();
390  RealType rf = inFunc.rmax();
391  auto agrid = std::make_unique<LinearGrid<RealType>>();
392  int ng = static_cast<int>(rf * 100) + 1;
393  agrid->set(0.0, rf, ng);
394  app_log() << " NonLocalECP l=" << angmom << " rmax = " << rf << std::endl;
395  app_log() << " Linear grid=[0," << rf << "] npts=" << ng << std::endl;
396  std::vector<RealType> pp_temp(ng);
397  //get the value
398  pp_temp[0] = inFunc(0);
399  for (int j = 1; j < ng; j++)
400  {
401  pp_temp[j] = inFunc.splint((*agrid)[j]);
402  }
403  auto app = new RadialPotentialType(std::move(agrid), pp_temp);
404  app->spline();
405  mynnloc->add(angmom, app);
406  lmax = std::max(lmax, angmom);
407  rmax = std::max(rmax, rf);
408  numnonloc++;
409  }
410  if (mynnloc)
411  {
412  mynnloc->setLmax(lmax);
413  mynnloc->setRmax(rmax);
414  app_log() << " Maximum cutoff of NonLocalECP " << rmax << std::endl;
415  }
416  }
417  fin.close();
418  if (mynnloc)
419  {
420  int numsgridpts = 0;
421  std::string fname = species + ".sgr";
422  std::ifstream fin(fname.c_str(), std::ios_base::in);
423  if (!fin)
424  {
425  app_error() << "Could not open file " << fname << std::endl;
426  exit(-1);
427  }
428  PosType xyz;
429  RealType weight;
430  while (fin >> xyz >> weight)
431  {
432  mynnloc->addknot(xyz, weight);
433  numsgridpts++;
434  }
435  //cout << "Spherical grid : " << numsgridpts << " points" << std::endl;
436  mynnloc->resize_warrays(numsgridpts, numnonloc, lmax);
437  nonLocalPot[ig] = std::move(mynnloc);
438  }
439  } //species
440 }
#define ERRORMSG(msg)
Definition: OutputManager.h:86
std::ostream & app_log()
Definition: OutputManager.h:65
std::ostream & app_error()
Definition: OutputManager.h:67
QMCTraits::PosType PosType
LocalECPotential::RadialPotentialType RadialPotentialType
std::vector< std::unique_ptr< RadialPotentialType > > localPot
SpeciesSet & getSpeciesSet()
retrun the SpeciesSet of this particle set
Definition: ParticleSet.h:231
QMCTraits::RealType RealType
std::vector< std::unique_ptr< NonLocalECPComponent > > nonLocalPot

◆ useXmlFormat()

void useXmlFormat ( xmlNodePtr  cur)

Definition at line 198 of file ECPotentialBuilder.cpp.

References OhmmsAttributeSet::add(), qmcplusplus::app_error(), qmcplusplus::app_log(), qmcplusplus::app_warning(), ECPComponentBuilder::AtomicNumber, Communicate::barrier_and_abort(), OHMMS::Controller, qmcplusplus::Units::charge::e, SpeciesSet::findSpecies(), ParticleSet::getSpeciesSet(), ECPotentialBuilder::hasL2Pot, ECPotentialBuilder::hasLocalPot, ECPotentialBuilder::hasNonLocalPot, ECPotentialBuilder::hasSOPot, ECPotentialBuilder::IonConfig, ECPotentialBuilder::L2Pot, ECPotentialBuilder::localPot, ECPotentialBuilder::localZeff, MPIObjectBase::myComm, ECPotentialBuilder::nonLocalPot, ECPComponentBuilder::parse(), ECPComponentBuilder::parseCasino(), ECPComponentBuilder::pp_L2, ECPComponentBuilder::pp_loc, ECPComponentBuilder::pp_nonloc, ECPComponentBuilder::pp_so, ECPComponentBuilder::printECPTable(), OhmmsAttributeSet::put(), ECPComponentBuilder::put(), MPIObjectBase::rank(), ECPotentialBuilder::soPot, ECPotentialBuilder::use_exact_spin, and ECPComponentBuilder::Zeff.

Referenced by ECPotentialBuilder::put().

199 {
200  cur = cur->children;
201  while (cur != NULL)
202  {
203  std::string cname((const char*)cur->name);
204  if (cname == "pseudo")
205  {
206  std::string href("none");
207  std::string ionName("none");
208  std::string format("xml");
209  int nrule = -1;
210  int llocal = -1;
211  bool disable_randomize_grid;
212  //RealType rc(2.0);//use 2 Bohr
213  OhmmsAttributeSet hAttrib;
214  hAttrib.add(href, "href");
215  hAttrib.add(ionName, "elementType");
216  hAttrib.add(ionName, "symbol");
217  hAttrib.add(format, "format");
218  hAttrib.add(nrule, "nrule");
219  hAttrib.add(llocal, "l-local");
220  hAttrib.add(disable_randomize_grid, "disable_randomize_grid", {false, true});
221  //hAttrib.add(rc,"cutoff");
222  hAttrib.put(cur);
223  SpeciesSet& ion_species(IonConfig.getSpeciesSet());
224  int speciesIndex = ion_species.findSpecies(ionName);
225  int chargeIndex = ion_species.findAttribute("charge");
226  int AtomicNumberIndex = ion_species.findAttribute("atomicnumber");
227  if (AtomicNumberIndex == -1)
228  AtomicNumberIndex = ion_species.findAttribute("atomic_number");
229  bool success = false;
230  if (speciesIndex < ion_species.getTotalNum())
231  {
232  app_log() << std::endl << " Adding pseudopotential for " << ionName << std::endl;
233 
234  //Use simpsons rule for spin integral if not using exact spin integration
235  int srule = use_exact_spin ? 0 : 8;
236  ECPComponentBuilder ecp(ionName, myComm, nrule, llocal, srule);
237  if (format == "xml")
238  {
239  if (href == "none")
240  {
241  success = ecp.put(cur);
242  }
243  else
244  {
245  success = ecp.parse(href, cur);
246  }
247  }
248  else if (format == "casino")
249  {
250  //success=ecp.parseCasino(href,rc);
251  success = ecp.parseCasino(href, cur);
252  }
253  if (success)
254  {
255  if (OHMMS::Controller->rank() == 0)
256  ecp.printECPTable();
257  if (ecp.pp_loc)
258  {
259  localPot[speciesIndex] = std::move(ecp.pp_loc);
260  localZeff[speciesIndex] = ecp.Zeff;
261  hasLocalPot = true;
262  }
263  if (ecp.pp_nonloc)
264  {
265  if (disable_randomize_grid)
266  app_warning() << "NLPP grid randomization is turned off. This setting should only be used for testing."
267  << std::endl;
268  ecp.pp_nonloc->set_randomize_grid(!disable_randomize_grid);
269  hasNonLocalPot = true;
270  nonLocalPot[speciesIndex] = std::move(ecp.pp_nonloc);
271  }
272  if (ecp.pp_so)
273  {
274  hasSOPot = true;
275  soPot[speciesIndex] = std::move(ecp.pp_so);
276  }
277  if (ecp.pp_L2)
278  {
279  hasL2Pot = true;
280  L2Pot[speciesIndex] = std::move(ecp.pp_L2);
281  }
282  if (chargeIndex == -1)
283  {
284  app_error() << " Ion species " << ionName << " needs parameter \'charge\'" << std::endl;
285  success = false;
286  }
287  else
288  {
289  RealType ion_charge = ion_species(chargeIndex, speciesIndex);
290  if (std::fabs(ion_charge - ecp.Zeff) > 1e-4)
291  {
292  app_error() << " Ion species " << ionName << " charge " << ion_charge << " pseudopotential charge "
293  << ecp.Zeff << " mismatch!" << std::endl;
294  success = false;
295  }
296  }
297  if (AtomicNumberIndex == -1)
298  {
299  app_error() << " Ion species " << ionName << " needs parameter \'atomicnumber\'" << std::endl;
300  success = false;
301  }
302  else
303  {
304  int atomic_number = ion_species(AtomicNumberIndex, speciesIndex);
305  if (atomic_number != ecp.AtomicNumber)
306  {
307  app_error() << " Ion species " << ionName << " atomicnumber " << atomic_number
308  << " pseudopotential atomic-number " << ecp.AtomicNumber << " mismatch!" << std::endl;
309  success = false;
310  }
311  }
312  }
313  }
314  else
315  {
316  app_error() << " Ion species " << ionName << " is not found." << std::endl;
317  }
318  if (!success)
319  {
320  app_error() << " Failed to add pseudopotential for element " << ionName << std::endl;
321  myComm->barrier_and_abort("ECPotentialBuilder::useXmlFormat failed!");
322  }
323  }
324  cur = cur->next;
325  }
326 }
std::ostream & app_warning()
Definition: OutputManager.h:69
std::ostream & app_log()
Definition: OutputManager.h:65
bool put(xmlNodePtr cur)
assign attributes to the set
Definition: AttributeSet.h:55
std::ostream & app_error()
Definition: OutputManager.h:67
Communicate * Controller
Global Communicator for a process.
Definition: Communicate.cpp:35
std::vector< std::unique_ptr< SOECPComponent > > soPot
Communicate * myComm
pointer to Communicate
Definition: MPIObjectBase.h:62
class to handle a set of attributes of an xmlNode
Definition: AttributeSet.h:24
std::vector< std::unique_ptr< RadialPotentialType > > localPot
std::vector< RealType > localZeff
SpeciesSet & getSpeciesSet()
retrun the SpeciesSet of this particle set
Definition: ParticleSet.h:231
QMCTraits::RealType RealType
std::vector< std::unique_ptr< NonLocalECPComponent > > nonLocalPot
std::vector< std::unique_ptr< L2RadialPotential > > L2Pot
void barrier_and_abort(const std::string &msg) const
int rank() const
return the rank of the communicator
Definition: MPIObjectBase.h:35
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

Member Data Documentation

◆ hasL2Pot

bool hasL2Pot

◆ hasLocalPot

◆ hasNonLocalPot

◆ hasSOPot

bool hasSOPot

◆ IonConfig

◆ L2Pot

std::vector<std::unique_ptr<L2RadialPotential> > L2Pot

◆ localPot

std::vector<std::unique_ptr<RadialPotentialType> > localPot

◆ localZeff

std::vector<RealType> localZeff

◆ nonLocalPot

std::vector<std::unique_ptr<NonLocalECPComponent> > nonLocalPot

◆ soPot

std::vector<std::unique_ptr<SOECPComponent> > soPot

◆ targetH

QMCHamiltonian& targetH

Definition at line 38 of file ECPotentialBuilder.h.

Referenced by ECPotentialBuilder::put().

◆ targetPsi

TrialWaveFunction& targetPsi

Definition at line 41 of file ECPotentialBuilder.h.

Referenced by ECPotentialBuilder::put().

◆ targetPtcl

ParticleSet& targetPtcl

Definition at line 40 of file ECPotentialBuilder.h.

Referenced by ECPotentialBuilder::put().

◆ use_exact_spin

bool use_exact_spin

The documentation for this struct was generated from the following files: