QMCPACK
ConstantSPOSet.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) 2023 Raymond Clay and QMCPACK developers.
6 //
7 // File developed by: Raymond Clay, rclay@sandia.gov, Sandia National Laboratories
8 //
9 // File created by: Raymond Clay, rclay@sandia.gov, Sandia National Laboratories
10 //////////////////////////////////////////////////////////////////////////////////////
11 
13 
14 namespace qmcplusplus
15 {
16 ConstantSPOSet::ConstantSPOSet(const std::string& my_name, const int nparticles, const int norbitals)
17  : SPOSet(my_name), numparticles_(nparticles)
18 {
19  OrbitalSetSize = norbitals;
23 
24  ref_psi_ = 0.0;
25  ref_egrad_ = 0.0;
26  ref_elapl_ = 0.0;
27 };
28 
29 std::unique_ptr<SPOSet> ConstantSPOSet::makeClone() const
30 {
31  auto myclone = std::make_unique<ConstantSPOSet>(my_name_, numparticles_, OrbitalSetSize);
32  myclone->setRefVals(ref_psi_);
33  myclone->setRefEGrads(ref_egrad_);
34  myclone->setRefELapls(ref_elapl_);
35  return myclone;
36 };
37 
38 std::string ConstantSPOSet::getClassName() const { return "ConstantSPOSet"; };
39 
41 {
42  APP_ABORT("ConstantSPOSet should not call checkOutVariables");
43 };
44 
45 void ConstantSPOSet::setOrbitalSetSize(int norbs) { APP_ABORT("ConstantSPOSet should not call setOrbitalSetSize()"); }
46 
47 void ConstantSPOSet::setRefVals(const ValueMatrix& vals)
48 {
49  assert(vals.cols() == OrbitalSetSize);
50  assert(vals.rows() == numparticles_);
51  ref_psi_ = vals;
52 };
53 void ConstantSPOSet::setRefEGrads(const GradMatrix& grads)
54 {
55  assert(grads.cols() == OrbitalSetSize);
56  assert(grads.rows() == numparticles_);
57  ref_egrad_ = grads;
58 };
59 void ConstantSPOSet::setRefELapls(const ValueMatrix& lapls)
60 {
61  assert(lapls.cols() == OrbitalSetSize);
62  assert(lapls.rows() == numparticles_);
63  ref_elapl_ = lapls;
64 };
65 
67 {
68  const auto* vp = dynamic_cast<const VirtualParticleSet*>(&P);
69  int ptcl = vp ? vp->refPtcl : iat;
70  assert(psi.size() == OrbitalSetSize);
71  for (int iorb = 0; iorb < OrbitalSetSize; iorb++)
72  psi[iorb] = ref_psi_(ptcl, iorb);
73 };
74 
75 void ConstantSPOSet::evaluateVGL(const ParticleSet& P, int iat, ValueVector& psi, GradVector& dpsi, ValueVector& d2psi)
76 {
77  for (int iorb = 0; iorb < OrbitalSetSize; iorb++)
78  {
79  psi[iorb] = ref_psi_(iat, iorb);
80  dpsi[iorb] = ref_egrad_(iat, iorb);
81  d2psi[iorb] = ref_elapl_(iat, iorb);
82  }
83 };
84 
86  int first,
87  int last,
88  ValueMatrix& logdet,
89  GradMatrix& dlogdet,
90  ValueMatrix& d2logdet)
91 {
92  for (int iat = first, i = 0; iat < last; ++iat, ++i)
93  {
94  ValueVector v(logdet[i], logdet.cols());
95  GradVector g(dlogdet[i], dlogdet.cols());
96  ValueVector l(d2logdet[i], d2logdet.cols());
97  evaluateVGL(P, iat, v, g, l);
98  }
99 }
100 } //namespace qmcplusplus
base class for Single-particle orbital sets
Definition: SPOSet.h:46
void evaluate_notranspose(const ParticleSet &P, int first, int last, ValueMatrix &logdet, GradMatrix &dlogdet, ValueMatrix &d2logdet) override
evaluate the values, gradients and laplacians of this single-particle orbital for [first...
void setRefELapls(const ValueMatrix &lapls)
Setter method to set ^2_i (r_i).
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
std::unique_ptr< SPOSet > makeClone() const override
make a clone of itself every derived class must implement this to have threading working correctly...
const std::string my_name_
name of the object, unique identifier
Definition: SPOSet.h:564
void evaluateVGL(const ParticleSet &P, int iat, ValueVector &psi, GradVector &dpsi, ValueVector &d2psi) override
evaluate the values, gradients and laplacians of this single-particle orbital set ...
A ParticleSet that handles virtual moves of a selected particle of a given physical ParticleSet Virtu...
void evaluateValue(const ParticleSet &P, int iat, ValueVector &psi) override
evaluate the values of this single-particle orbital set
int refPtcl
Reference particle.
void setOrbitalSetSize(int norbs) override
set the OrbitalSetSize
Specialized paritlce class for atomistic simulations.
Definition: ParticleSet.h:55
void setRefVals(const ValueMatrix &vals)
Setter method to set (r_i).
ConstantSPOSet(const std::string &my_name)=delete
ValueMatrix ref_psi_
evaluate_notranspose arrays are nparticle x norb matrices.
void setRefEGrads(const GradMatrix &grads)
Setter method to set (r_i).
OrbitalSetTraits< ValueType >::ValueVector ValueVector
Definition: SPOSet.h:49
class to handle a set of variables that can be modified during optimizations
Definition: VariableSet.h:49
std::string getClassName() const override
return class name
IndexType OrbitalSetSize
number of Single-particle orbitals
Definition: SPOSet.h:566
#define APP_ABORT(msg)
Widely used but deprecated fatal error macros from legacy code.
Definition: AppAbort.h:27
OrbitalSetTraits< ValueType >::GradVector GradVector
Definition: SPOSet.h:51
void checkOutVariables(const opt_variables_type &active) override
check out variational optimizable variables