QMCPACK
test_J1_bspline.cpp
Go to the documentation of this file.
1 //////////////////////////////////////////////////////////////////////////////////////
2 // This file is distributed under the University of Illinois/NCSA Open Source License.
3 // See LICENSE file in top directory for details.
4 //
5 // Copyright (c) 2016 Jeongnim Kim and QMCPACK developers.
6 //
7 // File developed by: Mark Dewing, markdewing@gmail.com, University of Illinois at Urbana-Champaign
8 //
9 // File created by: Mark Dewing, markdewing@gmail.com, University of Illinois at Urbana-Champaign
10 //////////////////////////////////////////////////////////////////////////////////////
11 
12 
13 #include "catch.hpp"
14 
15 #include "OhmmsData/Libxml2Doc.h"
16 #include "Particle/ParticleSet.h"
22 #include <ResourceCollection.h>
24 
25 #include <cstdio>
26 #include <string>
27 
28 
29 // Uncomment to print information and values from the underlying functor
30 //#define PRINT_SPLINE_DATA
31 
32 using std::string;
33 
34 namespace qmcplusplus
35 {
38 
39 TEST_CASE("BSpline functor zero", "[wavefunction]")
40 {
41  // What is being tested here is different depending on QMC_MIXED_PRECISION
42  // double with either match the real_type of the OptimizableFunctorBase or not
43  BsplineFunctor<double> bf("test_functor");
44 
45  double r = 1.2;
46  double u = bf.evaluate(r);
47  REQUIRE(u == 0.0);
48 }
49 
50 TEST_CASE("BSpline functor one", "[wavefunction]")
51 {
52  BsplineFunctor<double> bf("test_functor");
53 
54  bf.resize(1);
55 
56  double r = 1.2;
57  double u = bf.evaluate(r);
58  REQUIRE(u == 0.0);
59 }
60 
61 void test_J1_spline(const DynamicCoordinateKind kind_selected)
62 {
64 
65  const SimulationCell simulation_cell;
66  ParticleSet ions_(simulation_cell, kind_selected);
67  ParticleSet elec_(simulation_cell);
68 
69  ions_.setName("ion");
70  ions_.create({1});
71  ions_.R[0] = {2.0, 0.0, 0.0};
73  int CIdx = ispecies.addSpecies("C");
74  int ichargeIdx = ispecies.addAttribute("charge");
75  ispecies(ichargeIdx, CIdx) = 4;
76  ions_.resetGroups();
77  ions_.update();
78 
79  elec_.setName("elec");
80  elec_.create({1, 1});
81  elec_.R[0] = {1.00, 0.0, 0.0};
82  elec_.R[1] = {0.0, 0.0, 0.0};
83  SpeciesSet& tspecies = elec_.getSpeciesSet();
84  int upIdx = tspecies.addSpecies("u");
85  int downIdx = tspecies.addSpecies("d");
86  int chargeIdx = tspecies.addAttribute("charge");
87  tspecies(chargeIdx, upIdx) = -1;
88  tspecies(chargeIdx, downIdx) = -1;
89  elec_.resetGroups();
90 
91  const char* j1_xml_char = R"XML(<tmp>
92  <jastrow type="One-Body" name="J1" function="bspline" source="ion" print="yes" gpu="no">
93  <correlation elementType="C" rcut="10" size="8" cusp="0.0">
94  <coefficients id="eC" type="Array">
95 -0.2032153051 -0.1625595974 -0.143124599 -0.1216434956 -0.09919771951 -0.07111729038 -0.04445345869 -0.02135082917
96  </coefficients>
97  </correlation>
98  </jastrow>
99 </tmp>)XML";
100 
101  const char* j1_omptarget_xml_char = R"XML(<tmp>
102  <jastrow type="One-Body" name="J1" function="bspline" source="ion" print="yes" gpu="omptarget">
103  <correlation elementType="C" rcut="10" size="8" cusp="0.0">
104  <coefficients id="eC" type="Array">
105 -0.2032153051 -0.1625595974 -0.143124599 -0.1216434956 -0.09919771951 -0.07111729038 -0.04445345869 -0.02135082917
106  </coefficients>
107  </correlation>
108  </jastrow>
109 </tmp>)XML";
110 
112  bool okay =
113  doc.parseFromString(kind_selected == DynamicCoordinateKind::DC_POS_OFFLOAD ? j1_omptarget_xml_char : j1_xml_char);
114  REQUIRE(okay);
115 
116  xmlNodePtr root = doc.getRoot();
117 
118  xmlNodePtr jas1 = xmlFirstElementChild(root);
119 
120  RadialJastrowBuilder jastrow(c, elec_, ions_);
121 
123  auto j1_uptr = jastrow.buildComponent(jas1);
124  J1Type* j1 = dynamic_cast<J1Type*>(j1_uptr.get());
125  REQUIRE(j1);
126 
127  // update all distance tables
128  elec_.update();
129 
130  double logpsi_real = std::real(j1->evaluateLog(elec_, elec_.G, elec_.L));
131  CHECK(logpsi_real == Approx(0.3160552244)); // note: number not validated
132 
133  //Ionic Derivative Test.
134  QMCTraits::GradType gsource(0.0);
137  int nelecs = elec_.getTotalNum();
138 
139  for (int dim = 0; dim < OHMMS_DIM; dim++)
140  {
141  grad_grad_source[dim].resize(nelecs);
142  lapl_grad_source[dim].resize(nelecs);
143  }
144 
145  /////////////////////////////////////////
146  //Testing the ion gradient w.r.t. ion # 0
147  /////////////////////////////////////////
148  //NOTE: All test values in this section are validated against finite differences
149  // for this configuration.
150 
151  //First we test evalGradSource(P,ions,ionid);
152 
153  gsource = j1->evalGradSource(elec_, ions_, 0);
154 
155  //Gradient comparison
156  CHECK(std::real(gsource[0]) == Approx(-0.04695203659));
157  CHECK(std::real(gsource[1]) == Approx(0.00000000000));
158  CHECK(std::real(gsource[2]) == Approx(0.00000000000));
159 
160  //Now we test evalGradSource that returns higher order derivatives.
161  gsource = j1->evalGradSource(elec_, ions_, 0, grad_grad_source, lapl_grad_source);
162 
163  //Gradient comparison
164  CHECK(std::real(gsource[0]) == Approx(-0.04695203659));
165  CHECK(std::real(gsource[1]) == Approx(0.00000000000));
166  CHECK(std::real(gsource[2]) == Approx(0.00000000000));
167 
168  //Ion gradient of electron gradient comparison.
169  CHECK(std::real(grad_grad_source[0][0][0]) == Approx(-0.008883672));
170  CHECK(std::real(grad_grad_source[0][1][0]) == Approx(-0.002111879));
171  CHECK(std::real(grad_grad_source[1][0][1]) == Approx(0.028489287));
172  CHECK(std::real(grad_grad_source[1][1][1]) == Approx(0.009231375));
173  CHECK(std::real(grad_grad_source[2][0][2]) == Approx(0.028489287));
174  CHECK(std::real(grad_grad_source[2][1][2]) == Approx(0.009231375));
175 
176  //Ion gradient of electron laplacians.
177  CHECK(std::real(lapl_grad_source[0][0]) == Approx(0.1494918378));
178  CHECK(std::real(lapl_grad_source[0][1]) == Approx(-0.0056182539));
179  CHECK(std::real(lapl_grad_source[1][0]) == Approx(0.0000000000));
180  CHECK(std::real(lapl_grad_source[1][1]) == Approx(0.0000000000));
181  CHECK(std::real(lapl_grad_source[2][0]) == Approx(0.0000000000));
182  CHECK(std::real(lapl_grad_source[2][1]) == Approx(0.0000000000));
183 
184 
185  // now test evaluateHessian
186  WaveFunctionComponent::HessVector grad_grad_psi;
187  grad_grad_psi.resize(elec_.getTotalNum());
188  grad_grad_psi = 0.0;
189 
190  j1->evaluateHessian(elec_, grad_grad_psi);
191 
192  std::vector<double> hess_values = {
193  0.00888367, 0, 0, 0, -0.0284893, 0, 0, 0, -0.0284893, 0.00211188, 0, 0, 0, -0.00923137, 0, 0, 0, -0.00923137,
194  };
195 
196  int m = 0;
197  for (int n = 0; n < elec_.getTotalNum(); n++)
198  for (int i = 0; i < OHMMS_DIM; i++)
199  for (int j = 0; j < OHMMS_DIM; j++, m++)
200  {
201  CHECK(std::real(grad_grad_psi[n](i, j)) == Approx(hess_values[m]));
202  }
203 
204  j1->evaluateLog(elec_, elec_.G, elec_.L); // evaluateHessian has side effects
205 
206 
207  struct JValues
208  {
209  double r;
210  double u;
211  double du;
212  double ddu;
213  };
214 
215  // Cut and paste from output of gen_bspline_jastrow.py
216  const int N = 20;
217  JValues Vals[N] = {{0.00, -0.1896634025, 0, 0.06586224647},
218  {0.60, -0.1804990512, 0.02606308248, 0.02101469513},
219  {1.20, -0.1637586749, 0.0255799351, -0.01568108497},
220  {1.80, -0.1506226948, 0.01922435549, -0.005504180392},
221  {2.40, -0.1394848415, 0.01869442683, 0.001517191423},
222  {3.00, -0.128023472, 0.01946283614, 0.00104417293},
223  {3.60, -0.1161729491, 0.02009651096, 0.001689229059},
224  {4.20, -0.1036884223, 0.02172284322, 0.003731878464},
225  {4.80, -0.08992443283, 0.0240346508, 0.002736384838},
226  {5.40, -0.07519614609, 0.02475121662, -0.000347832122},
227  {6.00, -0.06054074137, 0.02397053075, -0.001842295859},
228  {6.60, -0.04654631918, 0.0225837382, -0.002780345968},
229  {7.20, -0.03347994129, 0.02104406699, -0.00218107833},
230  {7.80, -0.0211986378, 0.01996899618, -0.00173646255},
231  {8.40, -0.01004416026, 0.01635533409, -0.01030907776},
232  {9.00, -0.002594125744, 0.007782377232, -0.01556475446},
233  {9.60, -0.0001660240476, 0.001245180357, -0.006225901786},
234  {10.20, 0, 0, 0},
235  {10.80, 0, 0, 0},
236  {11.40, 0, 0, 0}};
237 
238  BsplineFunctor<RealType>* bf = j1->getFunctors()[0];
239 
240  for (int i = 0; i < N; i++)
241  {
242  RealType dv = 0.0;
243  RealType ddv = 0.0;
244  RealType val = bf->evaluate(Vals[i].r, dv, ddv);
245  CHECK(Vals[i].u == Approx(val));
246  CHECK(Vals[i].du == Approx(dv));
247  CHECK(Vals[i].ddu == Approx(ddv));
248  }
249 
250 #ifdef PRINT_SPLINE_DATA
251  // write out values of the Bspline functor
252  //BsplineFunctor<double> *bf = j1->J1Functors[0];
253  printf("NumParams = %d\n", bf->NumParams);
254  printf("CuspValue = %g\n", bf->CuspValue);
255  printf("DeltaR = %g\n", bf->DeltaR);
256  printf("SplineCoeffs size = %d\n", bf->SplineCoefs.size());
257  for (int j = 0; j < bf->SplineCoefs.size(); j++)
258  {
259  printf("%d %g\n", j, bf->SplineCoefs[j]);
260  }
261  printf("\n");
262 
263  for (int i = 0; i < 20; i++)
264  {
265  double r = 0.6 * i;
266  elec_.R[0][0] = r;
267  elec_.update();
268  double logpsi_real = std::real(j1->evaluateLog(elec_, elec_.G, elec_.L));
269  //double alt_val = bf->evaluate(r);
270  double dv = 0.0;
271  double ddv = 0.0;
272  double alt_val = bf->evaluate(r, dv, ddv);
273  printf("%g %g %g %g %g\n", r, logpsi_real, alt_val, dv, ddv);
274  }
275 #endif
276 
278  using PosType = QMCTraits::PosType;
279 
280  // set virtutal particle position
281  PosType newpos(0.3, 0.2, 0.5);
282 
283  elec_.makeVirtualMoves(newpos);
284  std::vector<ValueType> ratios(elec_.getTotalNum());
285  j1->evaluateRatiosAlltoOne(elec_, ratios);
286 
287  CHECK(std::real(ratios[0]) == Approx(0.9819208747));
288  CHECK(std::real(ratios[1]) == Approx(1.0040884258));
289 
290  elec_.makeMove(0, newpos - elec_.R[0]);
291  PsiValue ratio_0 = j1->ratio(elec_, 0);
292  elec_.rejectMove(0);
293 
294  CHECK(std::real(ratio_0) == Approx(0.9819208747));
295 
296  // test acceptMove results
297  elec_.makeMove(1, newpos - elec_.R[1]);
298  PsiValue ratio_1 = j1->ratio(elec_, 1);
299  j1->acceptMove(elec_, 1);
300  elec_.acceptMove(1);
301 
302  CHECK(std::real(ratio_1) == Approx(1.0040884258));
303  CHECK(std::real(j1->get_log_value()) == Approx(0.32013531536));
304 
305  // test to make sure that setting cusp for J1 works properly
306  const char* j1_xml_char_2 = R"XML(<tmp>
307 <jastrow type="One-Body" name="J1" function="bspline" source="ion" print="yes" gpu="no">
308  <correlation elementType="C" rcut="10" size="8" cusp="2.0">
309  <coefficients id="eC" type="Array">
310  -0.2032153051 -0.1625595974 -0.143124599 -0.1216434956 -0.09919771951 -0.07111729038 -0.04445345869 -0.02135082917
311  </coefficients>
312  </correlation>
313 </jastrow>
314 </tmp>)XML";
315 
316  const char* j1_omptarget_xml_char_2 = R"XML(<tmp>
317 <jastrow type="One-Body" name="J1" function="bspline" source="ion" print="yes" gpu="omptarget">
318  <correlation elementType="C" rcut="10" size="8" cusp="2.0">
319  <coefficients id="eC" type="Array">
320  -0.2032153051 -0.1625595974 -0.143124599 -0.1216434956 -0.09919771951 -0.07111729038 -0.04445345869 -0.02135082917
321  </coefficients>
322  </correlation>
323 </jastrow>
324 </tmp>)XML";
325 
326  Libxml2Document doc2;
327  bool okay2 = doc2.parseFromString(kind_selected == DynamicCoordinateKind::DC_POS_OFFLOAD ? j1_omptarget_xml_char_2
328  : j1_xml_char_2);
329  REQUIRE(okay2);
330 
331  xmlNodePtr root2 = doc2.getRoot();
332 
333  xmlNodePtr jas2 = xmlFirstElementChild(root2);
334 
335  RadialJastrowBuilder jastrow2(c, elec_, ions_);
336 
337  auto j12_uptr = jastrow2.buildComponent(jas2);
338  J1Type* j12 = dynamic_cast<J1Type*>(j12_uptr.get());
339  REQUIRE(j12);
340 
341  // Cut and paste from output of gen_bspline_jastrow.py
342  // note only the first two rows should change from above
343  const int N2 = 20;
344  JValues Vals2[N2] = {{0.00, -0.9304041433, 2, -3.534137754},
345  {0.60, -0.252599792, 0.4492630825, -1.634985305},
346  {1.20, -0.1637586749, 0.0255799351, -0.01568108497},
347  {1.80, -0.1506226948, 0.01922435549, -0.005504180392},
348  {2.40, -0.1394848415, 0.01869442683, 0.001517191423},
349  {3.00, -0.128023472, 0.01946283614, 0.00104417293},
350  {3.60, -0.1161729491, 0.02009651096, 0.001689229059},
351  {4.20, -0.1036884223, 0.02172284322, 0.003731878464},
352  {4.80, -0.08992443283, 0.0240346508, 0.002736384838},
353  {5.40, -0.07519614609, 0.02475121662, -0.000347832122},
354  {6.00, -0.06054074137, 0.02397053075, -0.001842295859},
355  {6.60, -0.04654631918, 0.0225837382, -0.002780345968},
356  {7.20, -0.03347994129, 0.02104406699, -0.00218107833},
357  {7.80, -0.0211986378, 0.01996899618, -0.00173646255},
358  {8.40, -0.01004416026, 0.01635533409, -0.01030907776},
359  {9.00, -0.002594125744, 0.007782377232, -0.01556475446},
360  {9.60, -0.0001660240476, 0.001245180357, -0.006225901786},
361  {10.20, 0, 0, 0},
362  {10.80, 0, 0, 0},
363  {11.40, 0, 0, 0}};
364 
365  BsplineFunctor<RealType>* bf2 = j12->getFunctors()[0];
366 
367  for (int i = 0; i < N2; i++)
368  {
369  RealType dv = 0.0;
370  RealType ddv = 0.0;
371  RealType val = bf2->evaluate(Vals2[i].r, dv, ddv);
372  CHECK(Vals2[i].du == Approx(dv));
373  CHECK(Vals2[i].u == Approx(val));
374  CHECK(Vals2[i].ddu == Approx(ddv));
375  }
376 
377  UniqueOptObjRefs opt_obj_refs;
378  j12->extractOptimizableObjectRefs(opt_obj_refs);
379  REQUIRE(opt_obj_refs.size() == 1);
380 
381  // testing batched interfaces
382  ResourceCollection pset_res("test_pset_res");
383  ResourceCollection wfc_res("test_wfc_res");
384 
385  elec_.createResource(pset_res);
386  j12->createResource(wfc_res);
387 
388  // make a clones
389  ParticleSet elec_clone(elec_);
390  auto j12_clone = j12->makeClone(elec_clone);
391 
392  // testing batched interfaces
393  RefVectorWithLeader<ParticleSet> p_ref_list(elec_, {elec_, elec_clone});
394  RefVectorWithLeader<WaveFunctionComponent> j1_ref_list(*j12, {*j12, *j12_clone});
395 
396  ResourceCollectionTeamLock<ParticleSet> mw_pset_lock(pset_res, p_ref_list);
397  ResourceCollectionTeamLock<WaveFunctionComponent> mw_wfc_lock(wfc_res, j1_ref_list);
398 
399  std::vector<bool> isAccepted(2, true);
400  ParticleSet::mw_update(p_ref_list);
401  j12->mw_recompute(j1_ref_list, p_ref_list, isAccepted);
402 
403  // test NLPP related APIs
404  const int nknot = 3;
405  VirtualParticleSet vp(elec_, nknot), vp_clone(elec_clone, nknot);
406  RefVectorWithLeader<VirtualParticleSet> vp_list(vp, {vp, vp_clone});
407  ResourceCollection vp_res("test_vp_res");
408  vp.createResource(vp_res);
409  ResourceCollectionTeamLock<VirtualParticleSet> mw_vp_lock(vp_res, vp_list);
410 
411  const int ei_table_index = elec_.addTable(ions_);
412  const auto& ei_table1 = elec_.getDistTableAB(ei_table_index);
413  // make virtual move of elec 0, reference ion 1
414  NLPPJob<RealType> job1(1, 0, ei_table1.getDistances()[0][1], -ei_table1.getDisplacements()[0][1]);
415  const auto& ei_table2 = elec_clone.getDistTableAB(ei_table_index);
416  // make virtual move of elec 1, reference ion 3
417  NLPPJob<RealType> job2(3, 1, ei_table2.getDistances()[1][3], -ei_table2.getDisplacements()[1][3]);
418 
419  std::vector<PosType> deltaV1{{0.1, 0.2, 0.3}, {0.1, 0.3, 0.2}, {0.2, 0.1, 0.3}};
420  std::vector<PosType> deltaV2{{0.02, 0.01, 0.03}, {0.02, 0.03, 0.01}, {0.03, 0.01, 0.02}};
421 
422  VirtualParticleSet::mw_makeMoves(vp_list, p_ref_list, {deltaV1, deltaV2}, {job1, job2}, false);
423 
424  std::vector<std::vector<ValueType>> nlpp_ratios(2);
425  nlpp_ratios[0].resize(nknot);
426  nlpp_ratios[1].resize(nknot);
427  j12->mw_evaluateRatios(j1_ref_list, RefVectorWithLeader<const VirtualParticleSet>(vp, {vp, vp_clone}), nlpp_ratios);
428 
429  CHECK(ValueApprox(nlpp_ratios[0][0]) == ValueType(1.0016646504));
430  CHECK(ValueApprox(nlpp_ratios[0][1]) == ValueType(1.0016646504));
431  CHECK(ValueApprox(nlpp_ratios[0][2]) == ValueType(1.011890802));
432  CHECK(ValueApprox(nlpp_ratios[1][0]) == ValueType(1.0001773019));
433  CHECK(ValueApprox(nlpp_ratios[1][1]) == ValueType(1.000242931));
434  CHECK(ValueApprox(nlpp_ratios[1][2]) == ValueType(1.0004189199));
435 }
436 
437 TEST_CASE("BSpline builder Jastrow J1", "[wavefunction]")
438 {
441 }
442 } // namespace qmcplusplus
DynamicCoordinateKind
enumerator for DynamicCoordinates kinds
void setName(const std::string &aname)
Definition: ParticleSet.h:237
Fixed-size array.
Definition: OhmmsTinyMeta.h:30
class that handles xmlDoc
Definition: Libxml2Doc.h:76
WaveFunctionComponent::PsiValue PsiValue
Definition: SlaterDet.cpp:25
int addSpecies(const std::string &aname)
When a name species does not exist, add a new species.
Definition: SpeciesSet.cpp:33
QMCTraits::RealType real
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
BsplineFunctor class for the Jastrows REAL is the real type used by offload target, it is the correct type for the mw data pointers and is also used to coerce/implicitly convert the Real type inherited OptimizableFunctorBase into that buffer if offload is off this happens too but is just an implementation quirk.
QTBase::RealType RealType
Definition: Configuration.h:58
size_t getTotalNum() const
Definition: ParticleSet.h:493
TEST_CASE("complex_helper", "[type_traits]")
std::unique_ptr< WaveFunctionComponent > buildComponent(xmlNodePtr cur) override
process a xml node at cur
A ParticleSet that handles virtual moves of a selected particle of a given physical ParticleSet Virtu...
xmlNodePtr getRoot()
Definition: Libxml2Doc.h:88
JastrowBuilder using an analytic 1d functor Should be able to eventually handle all one and two body ...
void createResource(ResourceCollection &collection) const
initialize a shared resource and hand it to a collection
void update(bool skipSK=false)
update the internal data
Communicate * Controller
Global Communicator for a process.
Definition: Communicate.cpp:35
ParticleLaplacian L
laplacians of the particles
Definition: ParticleSet.h:85
int addAttribute(const std::string &aname)
for a new attribute, allocate the data, !More often used to get the index of a species ...
Definition: SpeciesSet.cpp:45
#define OHMMS_DIM
Definition: config.h:64
const DistanceTableAB & getDistTableAB(int table_ID) const
get a distance table by table_ID and dyanmic_cast to DistanceTableAB
Wrapping information on parallelism.
Definition: Communicate.h:68
int addTable(const ParticleSet &psrc, DTModes modes=DTModes::ALL_OFF)
add a distance table
Specialization for one-body Jastrow function using multiple functors.
Definition: J1OrbitalSoA.h:46
Specialized paritlce class for atomistic simulations.
Definition: ParticleSet.h:55
QTBase::ValueType ValueType
Definition: Configuration.h:60
REQUIRE(std::filesystem::exists(filename))
void rejectMove(Index_t iat)
reject a proposed move in regular mode
ParticleGradient G
gradients of the particles
Definition: ParticleSet.h:83
ParticlePos R
Position.
Definition: ParticleSet.h:79
QTBase::PosType PosType
Definition: Configuration.h:61
static void mw_makeMoves(const RefVectorWithLeader< VirtualParticleSet > &vp_list, const RefVectorWithLeader< ParticleSet > &p_list, const RefVector< const std::vector< PosType >> &deltaV_list, const RefVector< const NLPPJob< RealType >> &joblist, bool sphere)
SpeciesSet & getSpeciesSet()
retrun the SpeciesSet of this particle set
Definition: ParticleSet.h:231
void create(const std::vector< int > &agroup)
create grouped particles
QMCTraits::RealType RealType
void makeMove(Index_t iat, const SingleParticlePos &displ, bool maybe_accept=true)
move the iat-th particle to active_pos_
bool parseFromString(const std::string_view data)
Definition: Libxml2Doc.cpp:204
Declaraton of ParticleAttrib<T>
static void mw_update(const RefVectorWithLeader< ParticleSet > &p_list, bool skipSK=false)
batched version of update
CHECK(log_values[0]==ComplexApprox(std::complex< double >{ 5.603777579195571, -6.1586603331188225 }))
handles acquire/release resource by the consumer (RefVectorWithLeader type).
OrbitalSetTraits< ValueType >::HessVector HessVector
LatticeGaussianProduct::ValueType ValueType
meta data for NLPP calculation of a pair of ion and electron This is not just meta data...
Declaration of WaveFunctionComponent.
Custom container for set of attributes for a set of species.
Definition: SpeciesSet.h:33
Real evaluate(Real r) const
void test_J1_spline(const DynamicCoordinateKind kind_selected)
void acceptMove(Index_t iat)
accept the move and update the particle attribute by the proposed move in regular mode ...
void makeVirtualMoves(const SingleParticlePos &newpos)
Handles virtual moves for all the particles to a single newpos.