QMCPACK
SPOSet.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: Ken Esler, kpesler@gmail.com, University of Illinois at Urbana-Champaign
8 // Miguel Morales, moralessilva2@llnl.gov, Lawrence Livermore National Laboratory
9 // Jeremy McMinnis, jmcminis@gmail.com, University of Illinois at Urbana-Champaign
10 // Jaron T. Krogel, krogeljt@ornl.gov, Oak Ridge National Laboratory
11 // Jeongnim Kim, jeongnim.kim@gmail.com, University of Illinois at Urbana-Champaign
12 // Mark A. Berrill, berrillma@ornl.gov, Oak Ridge National Laboratory
13 //
14 // File created by: Jeongnim Kim, jeongnim.kim@gmail.com, University of Illinois at Urbana-Champaign
15 //////////////////////////////////////////////////////////////////////////////////////
16 
17 
18 #include "SPOSet.h"
19 #include "Message/Communicate.h"
21 #include "OhmmsData/AttributeSet.h"
24 #include "hdf/hdf_archive.h"
25 #include <limits>
26 
27 namespace qmcplusplus
28 {
29 SPOSet::SPOSet(const std::string& my_name) : my_name_(my_name), OrbitalSetSize(0) {}
30 
32 {
33  if (isOptimizable())
34  throw std::logic_error("Bug!! " + getClassName() +
35  "::extractOptimizableObjectRefs "
36  "must be overloaded when the SPOSet is optimizable.");
37 }
38 
40 {
41  if (isOptimizable())
42  throw std::logic_error("Bug!! " + getClassName() +
43  "::checkOutVariables "
44  "must be overloaded when the SPOSet is optimizable.");
45 }
46 
48  ValueVector& psi,
49  const ValueVector& psiinv,
50  std::vector<ValueType>& ratios)
51 {
52  assert(psi.size() == psiinv.size());
53  for (int iat = 0; iat < VP.getTotalNum(); ++iat)
54  {
55  evaluateValue(VP, iat, psi);
56  ratios[iat] = simd::dot(psi.data(), psiinv.data(), psi.size());
57  }
58 }
59 
61  ValueVector& psi,
62  const std::pair<ValueVector, ValueVector>& spinor_multiplier,
63  const ValueVector& invrow,
64  std::vector<ValueType>& ratios)
65 {
66  throw std::runtime_error("Need specialization of " + getClassName() + "::evaluateDetSpinorRatios");
67 }
68 
71  const RefVector<ValueVector>& psi_list,
72  const std::vector<const ValueType*>& invRow_ptr_list,
73  std::vector<std::vector<ValueType>>& ratios_list) const
74 {
75  assert(this == &spo_list.getLeader());
76  for (int iw = 0; iw < spo_list.size(); iw++)
77  {
78  Vector<ValueType> invRow(const_cast<ValueType*>(invRow_ptr_list[iw]), psi_list[iw].get().size());
79  spo_list[iw].evaluateDetRatios(vp_list[iw], psi_list[iw], invRow, ratios_list[iw]);
80  }
81 }
82 
84  int iat,
85  ValueVector& psi,
86  GradVector& dpsi,
87  ValueVector& d2psi,
88  ValueVector& dspin)
89 {
90  throw std::runtime_error("Need specialization of SPOSet::evaluateVGL_spin");
91 }
92 
95  int iat,
96  const RefVector<ValueVector>& psi_v_list,
97  const RefVector<GradVector>& dpsi_v_list,
98  const RefVector<ValueVector>& d2psi_v_list) const
99 {
100  assert(this == &spo_list.getLeader());
101  for (int iw = 0; iw < spo_list.size(); iw++)
102  spo_list[iw].evaluateVGL(P_list[iw], iat, psi_v_list[iw], dpsi_v_list[iw], d2psi_v_list[iw]);
103 }
104 
106  const RefVectorWithLeader<ParticleSet>& P_list,
107  int iat,
108  const RefVector<ValueVector>& psi_v_list) const
109 {
110  assert(this == &spo_list.getLeader());
111  for (int iw = 0; iw < spo_list.size(); iw++)
112  spo_list[iw].evaluateValue(P_list[iw], iat, psi_v_list[iw]);
113 }
114 
116  const RefVectorWithLeader<ParticleSet>& P_list,
117  int iat,
118  const RefVector<ValueVector>& psi_v_list,
119  const RefVector<GradVector>& dpsi_v_list,
120  const RefVector<ValueVector>& d2psi_v_list,
121  OffloadMatrix<ComplexType>& mw_dspin) const
122 {
123  throw std::runtime_error(getClassName() + "::mw_evaluateVGLWithSpin() is not supported. \n");
124 }
125 
127  const RefVectorWithLeader<ParticleSet>& P_list,
128  int iat,
129  const std::vector<const ValueType*>& invRow_ptr_list,
130  OffloadMWVGLArray& phi_vgl_v,
131  std::vector<ValueType>& ratios,
132  std::vector<GradType>& grads) const
133 {
134  assert(this == &spo_list.getLeader());
135  assert(phi_vgl_v.size(0) == DIM_VGL);
136  assert(phi_vgl_v.size(1) == spo_list.size());
137  const size_t nw = spo_list.size();
138  const size_t norb_requested = phi_vgl_v.size(2);
139  GradVector dphi_v(norb_requested);
140  for (int iw = 0; iw < nw; iw++)
141  {
142  ValueVector phi_v(phi_vgl_v.data_at(0, iw, 0), norb_requested);
143  ValueVector d2phi_v(phi_vgl_v.data_at(4, iw, 0), norb_requested);
144  spo_list[iw].evaluateVGL(P_list[iw], iat, phi_v, dphi_v, d2phi_v);
145 
146  ratios[iw] = simd::dot(invRow_ptr_list[iw], phi_v.data(), norb_requested);
147  grads[iw] = simd::dot(invRow_ptr_list[iw], dphi_v.data(), norb_requested) / ratios[iw];
148 
149  // transpose the array of gradients to SoA in phi_vgl_v
150  for (size_t idim = 0; idim < DIM; idim++)
151  {
152  ValueType* phi_g = phi_vgl_v.data_at(idim + 1, iw, 0);
153  for (size_t iorb = 0; iorb < norb_requested; iorb++)
154  phi_g[iorb] = dphi_v[iorb][idim];
155  }
156  }
157  phi_vgl_v.updateTo();
158 }
159 
161  const RefVectorWithLeader<ParticleSet>& P_list,
162  int iat,
163  const std::vector<const ValueType*>& invRow_ptr_list,
164  OffloadMWVGLArray& phi_vgl_v,
165  std::vector<ValueType>& ratios,
166  std::vector<GradType>& grads,
167  std::vector<ValueType>& spingrads) const
168 {
169  throw std::runtime_error("Need specialization of " + getClassName() +
170  "::mw_evaluateVGLandDetRatioGradsWithSpin(). \n");
171 }
172 
173 void SPOSet::evaluateThirdDeriv(const ParticleSet& P, int first, int last, GGGMatrix& grad_grad_grad_logdet)
174 {
175  throw std::runtime_error("Need specialization of SPOSet::evaluateThirdDeriv(). \n");
176 }
177 
179  int first,
180  int last,
181  ValueMatrix& logdet,
182  GradMatrix& dlogdet,
183  ValueMatrix& d2logdet,
184  ValueMatrix& dspinlogdet)
185 {
186  throw std::runtime_error("Need specialization of " + getClassName() +
187  "::evaluate_notranspose_spin(P,iat,psi,dpsi,d2logdet, dspin_logdet) (vector quantities)\n");
188 }
189 
191  const RefVectorWithLeader<ParticleSet>& P_list,
192  int first,
193  int last,
194  const RefVector<ValueMatrix>& logdet_list,
195  const RefVector<GradMatrix>& dlogdet_list,
196  const RefVector<ValueMatrix>& d2logdet_list) const
197 {
198  assert(this == &spo_list.getLeader());
199  for (int iw = 0; iw < spo_list.size(); iw++)
200  spo_list[iw].evaluate_notranspose(P_list[iw], first, last, logdet_list[iw], dlogdet_list[iw], d2logdet_list[iw]);
201 }
202 
204  int first,
205  int last,
206  ValueMatrix& logdet,
207  GradMatrix& dlogdet,
208  HessMatrix& grad_grad_logdet)
209 {
210  throw std::runtime_error("Need specialization of SPOSet::evaluate_notranspose() for grad_grad_logdet. \n");
211 }
212 
214  int first,
215  int last,
216  ValueMatrix& logdet,
217  GradMatrix& dlogdet,
218  HessMatrix& grad_grad_logdet,
219  GGGMatrix& grad_grad_grad_logdet)
220 {
221  throw std::runtime_error("Need specialization of SPOSet::evaluate_notranspose() for grad_grad_grad_logdet. \n");
222 }
223 
224 
225 std::unique_ptr<SPOSet> SPOSet::makeClone() const
226 {
227  throw std::runtime_error("Missing SPOSet::makeClone for " + getClassName());
228 }
229 
230 void SPOSet::basic_report(const std::string& pad) const
231 {
232  app_log() << pad << "size = " << size() << std::endl;
233  app_log() << pad << "state info:" << std::endl;
234  //states.report(pad+" ");
235  app_log().flush();
236 }
237 
238 void SPOSet::evaluateVGH(const ParticleSet& P, int iat, ValueVector& psi, GradVector& dpsi, HessVector& grad_grad_psi)
239 {
240  throw std::runtime_error("Need specialization of " + getClassName() +
241  "::evaluate(P,iat,psi,dpsi,dhpsi) (vector quantities)\n");
242 }
243 
245  int iat,
246  ValueVector& psi,
247  GradVector& dpsi,
248  HessVector& grad_grad_psi,
249  GGGVector& grad_grad_grad_psi)
250 {
251  throw std::runtime_error("Need specialization of " + getClassName() +
252  "::evaluate(P,iat,psi,dpsi,dhpsi,dghpsi) (vector quantities)\n");
253 }
254 
255 void SPOSet::applyRotation(const ValueMatrix& rot_mat, bool use_stored_copy)
256 {
257  if (isRotationSupported())
258  throw std::logic_error("Bug!! " + getClassName() +
259  "::applyRotation "
260  "must be overloaded when the SPOSet supports rotation.");
261 }
262 
264  const opt_variables_type& optvars,
265  Vector<ValueType>& dlogpsi,
266  Vector<ValueType>& dhpsioverpsi,
267  const int& FirstIndex,
268  const int& LastIndex)
269 {
270  if (isOptimizable())
271  throw std::logic_error("Bug!! " + getClassName() +
272  "::evaluateDerivatives "
273  "must be overloaded when the SPOSet is optimizable.");
274 }
275 
277  const opt_variables_type& optvars,
278  Vector<ValueType>& dlogpsi,
279  int FirstIndex,
280  int LastIndex)
281 {
282  if (isOptimizable())
283  throw std::logic_error("Bug!! " + getClassName() +
284  "::evaluateDerivativesWF "
285  "must be overloaded when the SPOSet is optimizable.");
286 }
287 
289  const opt_variables_type& optvars,
290  ValueVector& psi,
291  const ValueVector& psiinv,
292  std::vector<ValueType>& ratios,
293  Matrix<ValueType>& dratios,
294  int FirstIndex,
295  int LastIndex)
296 {
297  // Match the fallback in WaveFunctionComponent that evaluates just the ratios
298  evaluateDetRatios(VP, psi, psiinv, ratios);
299 
300  if (isOptimizable())
301  throw std::logic_error("Bug!! " + getClassName() +
302  "::evaluateDerivRatios "
303  "must be overloaded when the SPOSet is optimizable.");
304 }
305 
306 
307 /** Evaluate the derivative of the optimized orbitals with respect to the parameters
308  * this is used only for MSD, to be refined for better serving both single and multi SD
309  */
311  const opt_variables_type& optvars,
312  Vector<ValueType>& dlogpsi,
313  Vector<ValueType>& dhpsioverpsi,
314  const ValueType& psiCurrent,
315  const std::vector<ValueType>& Coeff,
316  const std::vector<size_t>& C2node_up,
317  const std::vector<size_t>& C2node_dn,
318  const ValueVector& detValues_up,
319  const ValueVector& detValues_dn,
320  const GradMatrix& grads_up,
321  const GradMatrix& grads_dn,
322  const ValueMatrix& lapls_up,
323  const ValueMatrix& lapls_dn,
324  const ValueMatrix& M_up,
325  const ValueMatrix& M_dn,
326  const ValueMatrix& Minv_up,
327  const ValueMatrix& Minv_dn,
328  const GradMatrix& B_grad,
329  const ValueMatrix& B_lapl,
330  const std::vector<int>& detData_up,
331  const size_t N1,
332  const size_t N2,
333  const size_t NP1,
334  const size_t NP2,
335  const std::vector<std::vector<int>>& lookup_tbl)
336 {
337  if (isOptimizable())
338  throw std::logic_error("Bug!! " + getClassName() +
339  "::evaluateDerivatives "
340  "must be overloaded when the SPOSet is optimizable.");
341 }
342 
343 /** Evaluate the derivative of the optimized orbitals with respect to the parameters
344  * this is used only for MSD, to be refined for better serving both single and multi SD
345  */
347  const opt_variables_type& optvars,
348  Vector<ValueType>& dlogpsi,
349  const QTFull::ValueType& psiCurrent,
350  const std::vector<ValueType>& Coeff,
351  const std::vector<size_t>& C2node_up,
352  const std::vector<size_t>& C2node_dn,
353  const ValueVector& detValues_up,
354  const ValueVector& detValues_dn,
355  const ValueMatrix& M_up,
356  const ValueMatrix& M_dn,
357  const ValueMatrix& Minv_up,
358  const ValueMatrix& Minv_dn,
359  const std::vector<int>& detData_up,
360  const std::vector<std::vector<int>>& lookup_tbl)
361 {
362  if (isOptimizable())
363  throw std::logic_error("Bug!! " + getClassName() +
364  "::evaluateDerivativesWF "
365  "must be overloaded when the SPOSet is optimizable.");
366 }
367 
368 
370  int first,
371  int last,
372  const ParticleSet& source,
373  int iat_src,
374  GradMatrix& gradphi)
375 {
376  if (hasIonDerivs())
377  throw std::logic_error("Bug!! " + getClassName() +
378  "::evaluateGradSource "
379  "must be overloaded when the SPOSet has ion derivatives.");
380 }
381 
383  int first,
384  int last,
385  const ParticleSet& source,
386  int iat_src,
387  GradMatrix& grad_phi,
388  HessMatrix& grad_grad_phi,
389  GradMatrix& grad_lapl_phi)
390 {
391  if (hasIonDerivs())
392  throw std::logic_error("Bug!! " + getClassName() +
393  "::evaluateGradSource "
394  "must be overloaded when the SPOSet has ion derivatives.");
395 }
396 
398  int iel,
399  const ParticleSet& source,
400  int iat_src,
401  GradVector& gradphi)
402 {
403  if (hasIonDerivs())
404  throw std::logic_error("Bug!! " + getClassName() +
405  "::evaluateGradSourceRow "
406  "must be overloaded when the SPOSet has ion derivatives.");
407 }
408 
409 void SPOSet::evaluate_spin(const ParticleSet& P, int iat, ValueVector& psi, ValueVector& dpsi)
410 {
411  throw std::runtime_error("Need specialization of " + getClassName() +
412  "::evaluate_spin(P,iat,psi,dpsi) (vector quantities)\n");
413 }
414 
415 } // namespace qmcplusplus
virtual void evaluate_notranspose(const ParticleSet &P, int first, int last, ValueMatrix &logdet, GradMatrix &dlogdet, ValueMatrix &d2logdet)=0
evaluate the values, gradients and laplacians of this single-particle orbital for [first...
SPOSet(const std::string &my_name)
constructor
Definition: SPOSet.cpp:29
OrbitalSetTraits< ValueType >::HessVector HessVector
Definition: SPOSet.h:53
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
T dot(const T *restrict a, const T *restrict b, int n, TRES res=TRES())
dot product
virtual void evaluateDerivativesWF(ParticleSet &P, const opt_variables_type &optvars, Vector< ValueType > &dlogpsi, int FirstIndex, int LastIndex)
Parameter derivatives of the wavefunction.
Definition: SPOSet.cpp:276
virtual std::unique_ptr< SPOSet > makeClone() const
make a clone of itself every derived class must implement this to have threading working correctly...
Definition: SPOSet.cpp:225
Type_t * data_at(const std::array< SIZET, D > &indices)
Definition: OhmmsArray.h:104
virtual void evaluateDerivRatios(const VirtualParticleSet &VP, const opt_variables_type &optvars, ValueVector &psi, const ValueVector &psiinv, std::vector< ValueType > &ratios, Matrix< ValueType > &dratios, int FirstIndex, int LastIndex)
Determinant ratios and parameter derivatives of the wavefunction for virtual moves.
Definition: SPOSet.cpp:288
std::ostream & app_log()
Definition: OutputManager.h:65
RealType ValueType
Definition: QMCTypes.h:42
A ParticleSet that handles virtual moves of a selected particle of a given physical ParticleSet Virtu...
virtual void evaluateVGH(const ParticleSet &P, int iat, ValueVector &psi, GradVector &dpsi, HessVector &grad_grad_psi)
evaluate the values, gradients and hessians of this single-particle orbital set
Definition: SPOSet.cpp:238
OrbitalSetTraits< ValueType >::ValueMatrix ValueMatrix
Definition: SPOSet.h:50
int size() const
return the size of the orbital set Ye: this needs to be replaced by getOrbitalSetSize(); ...
Definition: SPOSet.h:75
virtual void applyRotation(const ValueMatrix &rot_mat, bool use_stored_copy=false)
apply rotation to all the orbitals
Definition: SPOSet.cpp:255
void basic_report(const std::string &pad="") const
print basic SPOSet information
Definition: SPOSet.cpp:230
virtual void evaluateDetSpinorRatios(const VirtualParticleSet &VP, ValueVector &psi, const std::pair< ValueVector, ValueVector > &spinor_multiplier, const ValueVector &invrow, std::vector< ValueType > &ratios)
evaluate determinant ratios for virtual moves, specifically for Spinor SPOSets
Definition: SPOSet.cpp:60
virtual void mw_evaluateVGLandDetRatioGradsWithSpin(const RefVectorWithLeader< SPOSet > &spo_list, const RefVectorWithLeader< ParticleSet > &P_list, int iat, const std::vector< const ValueType *> &invRow_ptr_list, OffloadMWVGLArray &phi_vgl_v, std::vector< ValueType > &ratios, std::vector< GradType > &grads, std::vector< ValueType > &spingrads) const
evaluate the values, gradients and laplacians of this single-particle orbital sets and determinant ra...
Definition: SPOSet.cpp:160
OrbitalSetTraits< ValueType >::GradMatrix GradMatrix
Definition: SPOSet.h:52
virtual void evaluateValue(const ParticleSet &P, int iat, ValueVector &psi)=0
evaluate the values of this single-particle orbital set
Specialized paritlce class for atomistic simulations.
Definition: ParticleSet.h:55
virtual void evaluateGradSourceRow(const ParticleSet &P, int iel, const ParticleSet &source, int iat_src, GradVector &gradphi)
Returns a row of d/dR_iat phi_j(r) evaluated at position r.
Definition: SPOSet.cpp:397
virtual void mw_evaluateValue(const RefVectorWithLeader< SPOSet > &spo_list, const RefVectorWithLeader< ParticleSet > &P_list, int iat, const RefVector< ValueVector > &psi_v_list) const
evaluate the values this single-particle orbital sets of multiple walkers
Definition: SPOSet.cpp:105
virtual std::string getClassName() const =0
return class name
virtual void mw_evaluate_notranspose(const RefVectorWithLeader< SPOSet > &spo_list, const RefVectorWithLeader< ParticleSet > &P_list, int first, int last, const RefVector< ValueMatrix > &logdet_list, const RefVector< GradMatrix > &dlogdet_list, const RefVector< ValueMatrix > &d2logdet_list) const
Definition: SPOSet.cpp:190
QTBase::ValueType ValueType
Definition: Configuration.h:60
virtual void mw_evaluateVGL(const RefVectorWithLeader< SPOSet > &spo_list, const RefVectorWithLeader< ParticleSet > &P_list, int iat, const RefVector< ValueVector > &psi_v_list, const RefVector< GradVector > &dpsi_v_list, const RefVector< ValueVector > &d2psi_v_list) const
evaluate the values, gradients and laplacians of this single-particle orbital sets of multiple walker...
Definition: SPOSet.cpp:93
declaration of ProgressReportEngine
virtual void mw_evaluateVGLandDetRatioGrads(const RefVectorWithLeader< SPOSet > &spo_list, const RefVectorWithLeader< ParticleSet > &P_list, int iat, const std::vector< const ValueType *> &invRow_ptr_list, OffloadMWVGLArray &phi_vgl_v, std::vector< ValueType > &ratios, std::vector< GradType > &grads) const
evaluate the values, gradients and laplacians of this single-particle orbital sets and determinant ra...
Definition: SPOSet.cpp:126
OrbitalSetTraits< ValueType >::ValueVector ValueVector
Definition: SPOSet.h:49
virtual void evaluateVGL(const ParticleSet &P, int iat, ValueVector &psi, GradVector &dpsi, ValueVector &d2psi)=0
evaluate the values, gradients and laplacians of this single-particle orbital set ...
virtual void evaluateVGL_spin(const ParticleSet &P, int iat, ValueVector &psi, GradVector &dpsi, ValueVector &d2psi, ValueVector &dspin)
evaluate the values, gradients and laplacians and spin gradient of this single-particle orbital set ...
Definition: SPOSet.cpp:83
class to handle a set of variables that can be modified during optimizations
Definition: VariableSet.h:49
virtual bool isOptimizable() const
Query if this SPOSet is optimizable.
Definition: SPOSet.h:91
size_t size() const
Definition: OhmmsArray.h:57
virtual bool hasIonDerivs() const
Query if this SPOSet has an explicit ion dependence.
Definition: SPOSet.h:108
virtual void evaluateDetRatios(const VirtualParticleSet &VP, ValueVector &psi, const ValueVector &psiinv, std::vector< ValueType > &ratios)
evaluate determinant ratios for virtual moves, e.g., sphere move for nonlocalPP
Definition: SPOSet.cpp:47
std::vector< std::reference_wrapper< T > > RefVector
virtual void evaluateDerivatives(ParticleSet &P, const opt_variables_type &optvars, Vector< ValueType > &dlogpsi, Vector< ValueType > &dhpsioverpsi, const int &FirstIndex, const int &LastIndex)
Parameter derivatives of the wavefunction and the Laplacian of the wavefunction.
Definition: SPOSet.cpp:263
virtual void evaluateThirdDeriv(const ParticleSet &P, int first, int last, GGGMatrix &grad_grad_grad_logdet)
evaluate the third derivatives of this single-particle orbital set
Definition: SPOSet.cpp:173
OrbitalSetTraits< ValueType >::GradHessVector GGGVector
Definition: SPOSet.h:55
OrbitalSetTraits< ValueType >::GradVector GradVector
Definition: SPOSet.h:51
virtual void mw_evaluateVGLWithSpin(const RefVectorWithLeader< SPOSet > &spo_list, const RefVectorWithLeader< ParticleSet > &P_list, int iat, const RefVector< ValueVector > &psi_v_list, const RefVector< GradVector > &dpsi_v_list, const RefVector< ValueVector > &d2psi_v_list, OffloadMatrix< ComplexType > &mw_dspin) const
evaluate the values, gradients and laplacians and spin gradient of this single-particle orbital sets ...
Definition: SPOSet.cpp:115
void updateTo(size_t size=0, std::ptrdiff_t offset=0)
Definition: OhmmsArray.h:224
virtual void mw_evaluateDetRatios(const RefVectorWithLeader< SPOSet > &spo_list, const RefVectorWithLeader< const VirtualParticleSet > &vp_list, const RefVector< ValueVector > &psi_list, const std::vector< const ValueType *> &invRow_ptr_list, std::vector< std::vector< ValueType >> &ratios_list) const
evaluate determinant ratios for virtual moves, e.g., sphere move for nonlocalPP, of multiple walkers ...
Definition: SPOSet.cpp:69
virtual void evaluate_notranspose_spin(const ParticleSet &P, int first, int last, ValueMatrix &logdet, GradMatrix &dlogdet, ValueMatrix &d2logdet, ValueMatrix &dspinlogdet)
evaluate the values, gradients and laplacians of this single-particle orbital for [first...
Definition: SPOSet.cpp:178
virtual void extractOptimizableObjectRefs(UniqueOptObjRefs &opt_obj_refs)
extract underlying OptimizableObject references
Definition: SPOSet.cpp:31
virtual bool isRotationSupported() const
return true if this SPOSet can be wrappered by RotatedSPO
Definition: SPOSet.h:114
virtual void checkOutVariables(const opt_variables_type &active)
check out variational optimizable variables
Definition: SPOSet.cpp:39
OrbitalSetTraits< ValueType >::GradHessMatrix GGGMatrix
Definition: SPOSet.h:56
A D-dimensional Array class based on PETE.
Definition: OhmmsArray.h:25
virtual void evaluateVGHGH(const ParticleSet &P, int iat, ValueVector &psi, GradVector &dpsi, HessVector &grad_grad_psi, GGGVector &grad_grad_grad_psi)
evaluate the values, gradients, hessians, and grad hessians of this single-particle orbital set ...
Definition: SPOSet.cpp:244
virtual void evaluateGradSource(const ParticleSet &P, int first, int last, const ParticleSet &source, int iat_src, GradMatrix &gradphi)
evaluate the gradients of this single-particle orbital for [first,last) target particles with respect...
Definition: SPOSet.cpp:369
OrbitalSetTraits< ValueType >::HessMatrix HessMatrix
Definition: SPOSet.h:54
virtual void evaluate_spin(const ParticleSet &P, int iat, ValueVector &psi, ValueVector &dpsi)
evaluate the values of this single-particle orbital set
Definition: SPOSet.cpp:409