QMCPACK
ACForce Class Reference
+ Inheritance diagram for ACForce:
+ Collaboration diagram for ACForce:

Public Types

using Forces = ParticleSet::ParticlePos
 
using ParticleGradient = ParticleSet::ParticleGradient
 
- Public Types inherited from OperatorBase
enum  EnergyDomains { KINETIC = 0, POTENTIAL, NO_ENERGY_DOMAIN }
 enum to denote energy domain of operators More...
 
enum  QuantumDomains {
  NO_QUANTUM_DOMAIN = 0, CLASSICAL, QUANTUM, CLASSICAL_CLASSICAL,
  QUANTUM_CLASSICAL, QUANTUM_QUANTUM
}
 
enum  {
  PRIMARY = 0, OPTIMIZABLE = 1, RATIOUPDATE = 2, PHYSICAL = 3,
  COLLECTABLE = 4, NONLOCAL = 5
}
 enum for update_mode More...
 
using Return_t = FullPrecRealType
 type of return value of evaluate More...
 
using ValueMatrix = SPOSet::ValueMatrix
 For fast derivative evaluation. More...
 
using GradMatrix = SPOSet::GradMatrix
 
using BufferType = ParticleSet::Buffer_t
 typedef for the serialized buffer More...
 
using Walker_t = ParticleSet::Walker_t
 typedef for the walker More...
 
using ParticleScalar = ParticleSet::Scalar_t
 typedef for the ParticleScalar More...
 
using SPOMap = SPOSet::SPOMap
 typedef for SPOMap More...
 
- 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

 ACForce (ParticleSet &source, ParticleSet &target, TrialWaveFunction &psi, QMCHamiltonian &H)
 Constructor. More...
 
 ~ACForce () override=default
 Destructor, "final" triggers a clang warning. More...
 
bool dependsOnWaveFunction () const override
 return true if this operator depends on a wavefunction More...
 
std::string getClassName () const override
 return class name More...
 
bool put (xmlNodePtr cur) final
 I/O Routines. More...
 
bool get (std::ostream &os) const final
 write about the class More...
 
std::unique_ptr< OperatorBasemakeClone (ParticleSet &qp, TrialWaveFunction &psi) final
 Cloning. More...
 
std::unique_ptr< OperatorBasemakeClone (ParticleSet &qp, TrialWaveFunction &psi, QMCHamiltonian &H)
 
void resetTargetParticleSet (ParticleSet &P) final
 Initialization/assignment. More...
 
void addObservables (PropertySetType &plist, BufferType &collectables) final
 named values to the property list Default implementaton uses addValue(plist_) More...
 
void setObservables (PropertySetType &plist) final
 Set the values evaluated by this object to plist Default implementation is to assign Value which is updated by evaluate function using my_index_. More...
 
void setParticlePropertyList (PropertySetType &plist, int offset) final
 
void add2Hamiltonian (ParticleSet &qp, TrialWaveFunction &psi, QMCHamiltonian &targetH) final
 Since we store a reference to QMCHamiltonian, the baseclass method add2Hamiltonian isn't sufficient. More...
 
Return_t evaluate (ParticleSet &P) final
 Evaluate. More...
 
- Public Member Functions inherited from OperatorBase
 OperatorBase ()
 Construct a new Operator Base object Default and unique empty constructor. More...
 
virtual ~OperatorBase ()=default
 
std::bitset< 8 > & getUpdateMode () noexcept
 get update_mode_ reference More...
 
Return_t getValue () const noexcept
 get a copy of value_ More...
 
std::string getName () const noexcept
 getter a copy of my_name_, rvalue small string optimization More...
 
void setName (const std::string name) noexcept
 Set my_name member, uses small string optimization (pass by value) More...
 
TraceRequestgetRequest () noexcept
 Get request_ member. More...
 
virtual void registerObservables (std::vector< ObservableHelper > &h5desc, hdf_archive &file) const
 add to observable descriptor for hdf5 The default implementation is to register a scalar for this->value_ More...
 
virtual void registerCollectables (std::vector< ObservableHelper > &h5desc, hdf_archive &file) const
 
virtual void setHistories (Walker_t &ThisWalker)
 
virtual Return_t evaluateDeterministic (ParticleSet &P)
 Evaluate the local energy contribution of this component, deterministically based on current state. More...
 
virtual void mw_evaluate (const RefVectorWithLeader< OperatorBase > &o_list, const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list) const
 Evaluate the contribution of this component of multiple walkers. More...
 
virtual void mw_evaluatePerParticle (const RefVectorWithLeader< OperatorBase > &o_list, const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list, const std::vector< ListenerVector< RealType >> &listeners, const std::vector< ListenerVector< RealType >> &listeners_ions) const
 Evaluate the contribution of this component of multiple walkers per particle and report to registerd listeners from objects in Estimators. More...
 
virtual void mw_evaluateWithParameterDerivatives (const RefVectorWithLeader< OperatorBase > &o_list, const RefVectorWithLeader< ParticleSet > &p_list, const opt_variables_type &optvars, const RecordArray< ValueType > &dlogpsi, RecordArray< ValueType > &dhpsioverpsi) const
 TODO: add docs. More...
 
virtual Return_t rejectedMove (ParticleSet &P)
 TODO: add docs. More...
 
virtual Return_t evaluateWithToperator (ParticleSet &P)
 Evaluate the local energy contribution of this component with Toperators updated if requested. More...
 
virtual void mw_evaluateWithToperator (const RefVectorWithLeader< OperatorBase > &o_list, const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list) const
 Evaluate the contribution of this component of multiple walkers. More...
 
virtual void mw_evaluatePerParticleWithToperator (const RefVectorWithLeader< OperatorBase > &o_list, const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list, const std::vector< ListenerVector< RealType >> &listeners, const std::vector< ListenerVector< RealType >> &listeners_ions) const
 Evaluate the contribution of this component of multiple walkers per particle and report to registerd listeners from objects in Estimators. More...
 
virtual Return_t evaluateValueAndDerivatives (ParticleSet &P, const opt_variables_type &optvars, const Vector< ValueType > &dlogpsi, Vector< ValueType > &dhpsioverpsi)
 Evaluate value and derivatives wrt the optimizables. More...
 
virtual Return_t evaluateWithIonDerivs (ParticleSet &P, ParticleSet &ions, TrialWaveFunction &psi, ParticleSet::ParticlePos &hf_term, ParticleSet::ParticlePos &pulay_term)
 Evaluate contribution to local energy and derivatives w.r.t ionic coordinates from OperatorBase. More...
 
virtual Return_t evaluateWithIonDerivsDeterministic (ParticleSet &P, ParticleSet &ions, TrialWaveFunction &psi, ParticleSet::ParticlePos &hf_term, ParticleSet::ParticlePos &pulay_term)
 Evaluate contribution to local energy and derivatives w.r.t ionic coordinates from OperatorBase. More...
 
virtual void evaluateOneBodyOpMatrix (ParticleSet &P, const TWFFastDerivWrapper &psi, std::vector< ValueMatrix > &B)
 Evaluate "B" matrix for observable. More...
 
virtual void evaluateOneBodyOpMatrixForceDeriv (ParticleSet &P, ParticleSet &source, const TWFFastDerivWrapper &psi, const int iat, std::vector< std::vector< ValueMatrix >> &Bforce)
 Evaluate "dB/dR" matrices for observable. More...
 
virtual void updateSource (ParticleSet &s)
 Update data associated with a particleset. More...
 
virtual Return_t getEnsembleAverage ()
 Return an average value by collective operation. More...
 
virtual void createResource (ResourceCollection &collection) const
 Initialize a shared resource and hand it to a collection. More...
 
virtual void acquireResource (ResourceCollection &collection, const RefVectorWithLeader< OperatorBase > &o_list) const
 Acquire a shared resource from a collection. More...
 
virtual void releaseResource (ResourceCollection &collection, const RefVectorWithLeader< OperatorBase > &o_list) const
 Return a shared resource to a collection. More...
 
virtual void setRandomGenerator (RandomBase< FullPrecRealType > *rng)
 Set the Random Generator object TODO: add docs. More...
 
virtual void getRequiredTraces (TraceManager &tm)
 TODO: add docs. More...
 
virtual void informOfPerParticleListener ()
 
bool isClassical () const noexcept
 
bool isQuantum () const noexcept
 
bool isClassicalClassical () const noexcept
 
bool isQuantumClassical () const noexcept
 
bool isQuantumQuantum () const noexcept
 
bool getMode (const int i) const noexcept
 Return the mode i. More...
 
bool isNonLocal () const noexcept
 TODO: add docs. More...
 
bool hasListener () const noexcept
 
void contributeTraceQuantities ()
 Make trace quantities available. More...
 
void checkoutTraceQuantities (TraceManager &tm)
 Checkout trace arrays Derived classes must guard individual checkouts using request info. More...
 
void collectScalarTraces ()
 Collect scalar trace data. More...
 
void deleteTraceQuantities ()
 delete trace arrays More...
 

Static Public Member Functions

static RealType compute_regularizer_f (const ParticleGradient &G, const RealType epsilon)
 Computes multiplicative regularizer f(G,epsilon) according to Pathak-Wagner arXiv:2002.01434 . More...
 

Private Attributes

RealType delta_
 Finite difference timestep. More...
 
ParticleSetions_
 
ParticleSetelns_
 
TrialWaveFunctionpsi_
 
QMCHamiltonianham_
 
IndexType first_force_index_
 For indexing observables. More...
 
bool useSpaceWarp_
 Algorithm/feature switches. More...
 
bool fastDerivatives_
 
SpaceWarpTransformation swt_
 The space warp transformation class. More...
 
RealType reg_epsilon_
 
RealType f_epsilon_
 
Forces hf_force_
 Temporary Nion x 3 dimensional arrays for force storage. More...
 
Forces pulay_force_
 
Forces wf_grad_
 
Forces sw_pulay_
 
Forces sw_grad_
 
TWFFastDerivWrapper psi_wrapper_
 

Additional Inherited Members

- Protected Member Functions inherited from OperatorBase
virtual void contributeScalarQuantities ()
 
virtual void checkoutScalarQuantities (TraceManager &tm)
 
virtual void collectScalarQuantities ()
 
virtual void deleteScalarQuantities ()
 
virtual void contributeParticleQuantities ()
 
virtual void checkoutParticleQuantities (TraceManager &tm)
 
virtual void deleteParticleQuantities ()
 
virtual void setComputeForces (bool compute)
 
void setEnergyDomain (EnergyDomains edomain)
 Set the Energy Domain. More...
 
void setQuantumDomain (QuantumDomains qdomain)
 set quantum domain More...
 
void oneBodyQuantumDomain (const ParticleSet &P)
 set quantum domain for one-body operator More...
 
void twoBodyQuantumDomain (const ParticleSet &P)
 set quantum domain for two-body operator More...
 
void twoBodyQuantumDomain (const ParticleSet &P1, const ParticleSet &P2)
 set quantum domain for two-body operator More...
 
void addValue (PropertySetType &plist)
 named values to the property list More...
 
- Protected Attributes inherited from OperatorBase
std::bitset< 8 > update_mode_
 set the current update mode More...
 
Return_t value_
 current value More...
 
std::string name_
 name of this object More...
 
TraceRequest request_
 whether traces are being collected More...
 
int my_index_
 starting index of this object More...
 
Return_t new_value_
 a new value for a proposed move More...
 
Walker_tt_walker_
 reference to the current walker More...
 
bool streaming_particles_
 
bool have_required_traces_
 

Detailed Description

Definition at line 26 of file ACForce.h.

Member Typedef Documentation

◆ Forces

Definition at line 29 of file ACForce.h.

◆ ParticleGradient

Definition at line 30 of file ACForce.h.

Constructor & Destructor Documentation

◆ ACForce()

ACForce ( ParticleSet source,
ParticleSet target,
TrialWaveFunction psi,
QMCHamiltonian H 
)

Constructor.

Definition at line 22 of file ACForce.cpp.

References ACForce::elns_, ParticleSet::getTotalNum(), ACForce::hf_force_, TrialWaveFunction::initializeTWFFastDerivWrapper(), ACForce::ions_, ACForce::psi_wrapper_, ACForce::pulay_force_, OperatorBase::setName(), ACForce::sw_grad_, ACForce::sw_pulay_, and ACForce::wf_grad_.

23  : delta_(1e-4),
24  ions_(source),
25  elns_(target),
26  psi_(psi_in),
27  ham_(H),
29  useSpaceWarp_(false),
30  fastDerivatives_(false),
31  swt_(target, source),
32  reg_epsilon_(0.0),
33  f_epsilon_(1.0)
34 {
35  setName("ACForce");
36 
37  const std::size_t nIons = ions_.getTotalNum();
38  hf_force_.resize(nIons);
39  pulay_force_.resize(nIons);
40  wf_grad_.resize(nIons);
41  sw_pulay_.resize(nIons);
42  sw_grad_.resize(nIons);
43  psi_in.initializeTWFFastDerivWrapper(elns_, psi_wrapper_);
44 };
RealType f_epsilon_
Definition: ACForce.h:100
size_t getTotalNum() const
Definition: ParticleSet.h:493
RealType delta_
Finite difference timestep.
Definition: ACForce.h:78
SpaceWarpTransformation swt_
The space warp transformation class.
Definition: ACForce.h:96
void setName(const std::string name) noexcept
Set my_name member, uses small string optimization (pass by value)
QMCHamiltonian & ham_
Definition: ACForce.h:86
RealType reg_epsilon_
Definition: ACForce.h:99
IndexType first_force_index_
For indexing observables.
Definition: ACForce.h:89
TWFFastDerivWrapper psi_wrapper_
Definition: ACForce.h:110
bool useSpaceWarp_
Algorithm/feature switches.
Definition: ACForce.h:92
Forces hf_force_
Temporary Nion x 3 dimensional arrays for force storage.
Definition: ACForce.h:103
ParticleSet & ions_
Definition: ACForce.h:83
TrialWaveFunction & psi_
Definition: ACForce.h:85
ParticleSet & elns_
Definition: ACForce.h:84

◆ ~ACForce()

~ACForce ( )
overridedefault

Destructor, "final" triggers a clang warning.

Member Function Documentation

◆ add2Hamiltonian()

void add2Hamiltonian ( ParticleSet qp,
TrialWaveFunction psi,
QMCHamiltonian targetH 
)
finalvirtual

Since we store a reference to QMCHamiltonian, the baseclass method add2Hamiltonian isn't sufficient.

We override it here.

Reimplemented from OperatorBase.

Definition at line 92 of file ACForce.cpp.

References QMCHamiltonian::addOperator(), ACForce::makeClone(), OperatorBase::name_, OperatorBase::PHYSICAL, and OperatorBase::update_mode_.

Referenced by qmcplusplus::TEST_CASE().

93 {
94  //The following line is modified
95  std::unique_ptr<OperatorBase> myclone = makeClone(qp, psi, ham_in);
96  if (myclone)
97  {
98  ham_in.addOperator(std::move(myclone), name_, update_mode_[PHYSICAL]);
99  }
100 }
std::string name_
name of this object
Definition: OperatorBase.h:527
std::unique_ptr< OperatorBase > makeClone(ParticleSet &qp, TrialWaveFunction &psi) final
Cloning.
Definition: ACForce.cpp:46
std::bitset< 8 > update_mode_
set the current update mode
Definition: OperatorBase.h:521

◆ addObservables()

void addObservables ( PropertySetType plist,
BufferType collectables 
)
finalvirtual

named values to the property list Default implementaton uses addValue(plist_)

Parameters
plistRecordNameProperty
collectablesObservables that are accumulated by evaluate

Reimplemented from OperatorBase.

Definition at line 139 of file ACForce.cpp.

References RecordNamedProperty< T >::add(), ACForce::first_force_index_, ParticleSet::getTotalNum(), ACForce::ions_, OHMMS_DIM, and RecordNamedProperty< T >::size().

140 {
141  if (first_force_index_ < 0)
142  first_force_index_ = plist.size();
143  for (int iat = 0; iat < ions_.getTotalNum(); iat++)
144  {
145  const std::string iatStr(std::to_string(iat));
146 
147  for (int x = 0; x < OHMMS_DIM; x++)
148  {
149  const std::string xStr(std::to_string(x));
150 
151  const std::string hfname("ACForce_hf_" + iatStr + "_" + xStr);
152  const std::string pulayname("ACForce_pulay_" + iatStr + "_" + xStr);
153  const std::string wfgradname1("ACForce_Ewfgrad_" + iatStr + "_" + xStr);
154  const std::string wfgradname2("ACForce_wfgrad_" + iatStr + "_" + xStr);
155 
156  plist.add(hfname);
157  plist.add(pulayname);
158  plist.add(wfgradname1);
159  plist.add(wfgradname2);
160  }
161  }
162 };
size_t getTotalNum() const
Definition: ParticleSet.h:493
#define OHMMS_DIM
Definition: config.h:64
IndexType first_force_index_
For indexing observables.
Definition: ACForce.h:89
ParticleSet & ions_
Definition: ACForce.h:83

◆ compute_regularizer_f()

ACForce::RealType compute_regularizer_f ( const ParticleGradient G,
const RealType  epsilon 
)
static

Computes multiplicative regularizer f(G,epsilon) according to Pathak-Wagner arXiv:2002.01434 .

G estimates proximity to node, and f(G,epsilon) in that paper is used to scale all values.

Parameters
[in]G,nabla_iln(Psi), so vector of all electron gradients.
[in]epsilon,regularizerparameter.
Returns
Value of regularizer f(G,epsilon).

Definition at line 196 of file ACForce.cpp.

References qmcplusplus::abs(), qmcplusplus::Dot(), qmcplusplus::Dot_CC(), qmcplusplus::Units::charge::e, qmcplusplus::pow(), and qmcplusplus::sqrt().

Referenced by ACForce::evaluate(), and qmcplusplus::TEST_CASE().

197 {
198  //epsilon=0 corresponds to no regularization. However, since
199  //epsilon ends up in denominators, return 1 here.
200  if (std::abs(epsilon) < 1e-6)
201  return 1.0;
202 
203  RealType gdotg = 0.0;
204 #if defined(QMC_COMPLEX)
205  gdotg = Dot_CC(G, G);
206 #else
207  gdotg = Dot(G, G);
208 #endif
209 
210  RealType gmag = std::sqrt(gdotg);
211  RealType x;
212 
213  RealType regvalue = 0.0;
214  //x = grad(logpsi)/|grad(logpsi)|^2 = 1/|grad(logpsi)|.
215  //
216  //Argument of polynomial is x/epsilon=1/(epsilon*|grad(logpsi)|)
217  double xovereps = 1.0 / (epsilon * gmag);
218  if (xovereps >= 1.0)
219  regvalue = 1.0;
220  else
221  {
222  //There's a discrepancy between AIP Advances 10, 085213 (2020) and arXiv:2002.01434 for polynomial.
223  //We choose the arXiv, because f(x=1)=1, as opposed to f(x=1)=-4.
224  regvalue = 7.0 * std::pow(xovereps, 6.0) - 15.0 * std::pow(xovereps, 4.0) + 9.0 * std::pow(xovereps, 2.0);
225  }
226  return regvalue;
227 };
MakeReturn< UnaryNode< FnFabs, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t abs(const Vector< T1, C1 > &l)
T Dot(const ParticleAttrib< TinyVector< T, D >> &pa, const ParticleAttrib< TinyVector< T, D >> &pb)
MakeReturn< BinaryNode< FnPow, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t, typename CreateLeaf< Vector< T2, C2 > >::Leaf_t > >::Expression_t pow(const Vector< T1, C1 > &l, const Vector< T2, C2 > &r)
MakeReturn< UnaryNode< FnSqrt, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sqrt(const Vector< T1, C1 > &l)
QMCTraits::RealType RealType
double Dot_CC(const ParticleAttrib< TinyVector< std::complex< double >, D >> &pa, const ParticleAttrib< TinyVector< std::complex< double >, D >> &pb)

◆ dependsOnWaveFunction()

bool dependsOnWaveFunction ( ) const
inlineoverridevirtual

return true if this operator depends on a wavefunction

Reimplemented from OperatorBase.

Definition at line 37 of file ACForce.h.

37 { return true; }

◆ evaluate()

ACForce::Return_t evaluate ( ParticleSet P)
finalvirtual

Evaluate.

Implements OperatorBase.

Definition at line 101 of file ACForce.cpp.

References ACForce::compute_regularizer_f(), SpaceWarpTransformation::computeSWT(), ACForce::delta_, QMCHamiltonian::evaluateElecGrad(), QMCHamiltonian::evaluateIonDerivsDeterministic(), QMCHamiltonian::evaluateIonDerivsDeterministicFast(), ACForce::f_epsilon_, ACForce::fastDerivatives_, ParticleSet::G, TrialWaveFunction::G, ParticleSet::getTotalNum(), ACForce::ham_, ACForce::hf_force_, ACForce::ions_, ACForce::psi_, ACForce::psi_wrapper_, ACForce::pulay_force_, ACForce::reg_epsilon_, ACForce::sw_grad_, ACForce::sw_pulay_, ACForce::swt_, ACForce::useSpaceWarp_, OperatorBase::value_, and ACForce::wf_grad_.

Referenced by qmcplusplus::TEST_CASE().

102 {
103  hf_force_ = 0;
104  pulay_force_ = 0;
105  wf_grad_ = 0;
106  sw_pulay_ = 0;
107  sw_grad_ = 0;
108 
109 
110  //This function returns d/dR of the sum of all observables in the physical hamiltonian.
111  //Note that the sign will be flipped based on definition of force = -d/dR.
112  if (fastDerivatives_)
114  else
116 
117  if (useSpaceWarp_)
118  {
119  Forces el_grad;
120  el_grad.resize(P.getTotalNum());
121  el_grad = 0;
122 
123  ham_.evaluateElecGrad(P, psi_, el_grad, delta_);
124  swt_.computeSWT(P, ions_, el_grad, P.G, sw_pulay_, sw_grad_);
125  }
126 
127  //Now we compute the regularizer.
128  //WE ASSUME THAT psi_.evaluateLog(P) HAS ALREADY BEEN CALLED AND Grad(logPsi)
129  //IS ALREADY UP TO DATE FOR THIS CONFIGURATION.
130 
132 
133 
134  return 0.0;
135 };
RealType f_epsilon_
Definition: ACForce.h:100
FullPrecRealType evaluateIonDerivsDeterministicFast(ParticleSet &P, ParticleSet &ions, TrialWaveFunction &psi_in, TWFFastDerivWrapper &psi_wrapper, ParticleSet::ParticlePos &dedr, ParticleSet::ParticlePos &wf_grad)
evaluate local energy and derivatives w.r.t ionic coordinates, but deterministically.
static RealType compute_regularizer_f(const ParticleGradient &G, const RealType epsilon)
Computes multiplicative regularizer f(G,epsilon) according to Pathak-Wagner arXiv:2002.01434 .
Definition: ACForce.cpp:196
RealType delta_
Finite difference timestep.
Definition: ACForce.h:78
SpaceWarpTransformation swt_
The space warp transformation class.
Definition: ACForce.h:96
ParticleSet::ParticlePos Forces
Definition: ACForce.h:29
ParticleSet::ParticleGradient G
differential gradients
void computeSWT(ParticleSet &elec, const ParticleSet &ions, Force_t &dEl, ParticleGradient &dlogpsi, Force_t &el_contribution, Force_t &psi_contribution)
Takes in precomputed grad(E_L) and grad(logPsi) and computes the ZV and ZB space warp contributions t...
ParticleGradient G
gradients of the particles
Definition: ParticleSet.h:83
FullPrecRealType evaluateIonDerivsDeterministic(ParticleSet &P, ParticleSet &ions, TrialWaveFunction &psi, ParticleSet::ParticlePos &hf_terms, ParticleSet::ParticlePos &pulay_terms, ParticleSet::ParticlePos &wf_grad)
evaluate local energy and derivatives w.r.t ionic coordinates, but deterministically.
QMCHamiltonian & ham_
Definition: ACForce.h:86
void evaluateElecGrad(ParticleSet &P, TrialWaveFunction &psi, ParticleSet::ParticlePos &EGrad, RealType delta=1e-5)
Evaluate the electron gradient of the local energy.
Return_t value_
current value
Definition: OperatorBase.h:524
RealType reg_epsilon_
Definition: ACForce.h:99
TWFFastDerivWrapper psi_wrapper_
Definition: ACForce.h:110
bool useSpaceWarp_
Algorithm/feature switches.
Definition: ACForce.h:92
Forces hf_force_
Temporary Nion x 3 dimensional arrays for force storage.
Definition: ACForce.h:103
ParticleSet & ions_
Definition: ACForce.h:83
TrialWaveFunction & psi_
Definition: ACForce.h:85

◆ get()

bool get ( std::ostream &  os) const
finalvirtual

write about the class

Implements OperatorBase.

Definition at line 90 of file ACForce.cpp.

Referenced by qmcplusplus::TEST_CASE().

90 { return true; }

◆ getClassName()

std::string getClassName ( ) const
inlineoverridevirtual

return class name

Implements OperatorBase.

Definition at line 38 of file ACForce.h.

38 { return "ACForce"; }

◆ makeClone() [1/2]

std::unique_ptr< OperatorBase > makeClone ( ParticleSet qp,
TrialWaveFunction psi 
)
finalvirtual

Cloning.

Implements OperatorBase.

Definition at line 46 of file ACForce.cpp.

References APP_ABORT.

Referenced by ACForce::add2Hamiltonian(), and qmcplusplus::TEST_CASE().

47 {
48  APP_ABORT("ACForce::makeClone(ParticleSet&,TrialWaveFunction&) shouldn't be called");
49  return nullptr;
50 }
#define APP_ABORT(msg)
Widely used but deprecated fatal error macros from legacy code.
Definition: AppAbort.h:27

◆ makeClone() [2/2]

std::unique_ptr< OperatorBase > makeClone ( ParticleSet qp,
TrialWaveFunction psi,
QMCHamiltonian H 
)

Definition at line 52 of file ACForce.cpp.

References ACForce::delta_, ACForce::fastDerivatives_, ACForce::first_force_index_, ACForce::ions_, ACForce::reg_epsilon_, and ACForce::useSpaceWarp_.

53 {
54  std::unique_ptr<ACForce> myclone = std::make_unique<ACForce>(ions_, qp, psi_in, ham_in);
55  myclone->fastDerivatives_ = fastDerivatives_;
56  myclone->useSpaceWarp_ = useSpaceWarp_;
57  myclone->first_force_index_ = first_force_index_;
58  myclone->reg_epsilon_ = reg_epsilon_;
59  myclone->delta_ = delta_;
60  return myclone;
61 }
RealType delta_
Finite difference timestep.
Definition: ACForce.h:78
RealType reg_epsilon_
Definition: ACForce.h:99
IndexType first_force_index_
For indexing observables.
Definition: ACForce.h:89
bool useSpaceWarp_
Algorithm/feature switches.
Definition: ACForce.h:92
ParticleSet & ions_
Definition: ACForce.h:83

◆ put()

bool put ( xmlNodePtr  cur)
finalvirtual

I/O Routines.

Implements OperatorBase.

Definition at line 63 of file ACForce.cpp.

References OhmmsAttributeSet::add(), qmcplusplus::app_log(), ACForce::delta_, ACForce::fastDerivatives_, OhmmsAttributeSet::put(), ACForce::reg_epsilon_, SpaceWarpTransformation::setPow(), ACForce::swt_, and ACForce::useSpaceWarp_.

Referenced by qmcplusplus::TEST_CASE().

64 {
65  std::string ionionforce("yes");
66  RealType swpow(4);
67  OhmmsAttributeSet attr;
68  attr.add(useSpaceWarp_, "spacewarp", {false}); //"yes" or "no"
69  attr.add(swpow, "swpow"); //Real number"
70  attr.add(delta_, "delta"); //Real number"
71  attr.add(reg_epsilon_, "epsilon");
72  attr.add(fastDerivatives_, "fast_derivatives", {false});
73  attr.put(cur);
74  if (reg_epsilon_ < 0)
75  throw std::runtime_error("ACForce::put(): epsilon<0 not allowed.");
76  if (fastDerivatives_)
77  app_log() << "ACForce is using the fast force algorithm\n";
78  else
79  app_log() << "ACForce is using the default algorithm\n";
80  swt_.setPow(swpow);
81 
82  if (useSpaceWarp_)
83  app_log() << "ACForce is using space warp with power=" << swpow << std::endl;
84  else
85  app_log() << "ACForce is not using space warp\n";
86 
87  return true;
88 }
std::ostream & app_log()
Definition: OutputManager.h:65
bool put(xmlNodePtr cur)
assign attributes to the set
Definition: AttributeSet.h:55
RealType delta_
Finite difference timestep.
Definition: ACForce.h:78
void setPow(RealType swpow_in)
Sets the exponent for power law space warp transformation.
SpaceWarpTransformation swt_
The space warp transformation class.
Definition: ACForce.h:96
class to handle a set of attributes of an xmlNode
Definition: AttributeSet.h:24
QMCTraits::RealType RealType
RealType reg_epsilon_
Definition: ACForce.h:99
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
bool useSpaceWarp_
Algorithm/feature switches.
Definition: ACForce.h:92

◆ resetTargetParticleSet()

void resetTargetParticleSet ( ParticleSet P)
finalvirtual

Initialization/assignment.

Implements OperatorBase.

Definition at line 137 of file ACForce.cpp.

Referenced by qmcplusplus::TEST_CASE().

137 {}

◆ setObservables()

void setObservables ( PropertySetType plist)
finalvirtual

Set the values evaluated by this object to plist Default implementation is to assign Value which is updated by evaluate function using my_index_.

Parameters
plistRecordNameProperty

Reimplemented from OperatorBase.

Definition at line 163 of file ACForce.cpp.

References ACForce::f_epsilon_, ACForce::first_force_index_, ParticleSet::getTotalNum(), ACForce::hf_force_, ACForce::ions_, OHMMS_DIM, ACForce::pulay_force_, ACForce::sw_grad_, ACForce::sw_pulay_, OperatorBase::value_, and ACForce::wf_grad_.

164 {
165  // TODO : bounds check for plist
166 
167  int myindex = first_force_index_;
168  for (int iat = 0; iat < ions_.getTotalNum(); iat++)
169  {
170  for (int iondim = 0; iondim < OHMMS_DIM; iondim++)
171  {
172  //Flipping the sign, since these terms currently store d/dR values.
173  // add the minus one to be a force.
174  plist[myindex++] = -hf_force_[iat][iondim] * f_epsilon_;
175  plist[myindex++] = -(pulay_force_[iat][iondim] + sw_pulay_[iat][iondim]) * f_epsilon_;
176  plist[myindex++] = -value_ * (wf_grad_[iat][iondim] + sw_grad_[iat][iondim]) * f_epsilon_;
177  plist[myindex++] = -(wf_grad_[iat][iondim] + sw_grad_[iat][iondim]) * f_epsilon_;
178  }
179  }
180 };
RealType f_epsilon_
Definition: ACForce.h:100
size_t getTotalNum() const
Definition: ParticleSet.h:493
#define OHMMS_DIM
Definition: config.h:64
Return_t value_
current value
Definition: OperatorBase.h:524
IndexType first_force_index_
For indexing observables.
Definition: ACForce.h:89
Forces hf_force_
Temporary Nion x 3 dimensional arrays for force storage.
Definition: ACForce.h:103
ParticleSet & ions_
Definition: ACForce.h:83

◆ setParticlePropertyList()

void setParticlePropertyList ( PropertySetType plist,
int  offset 
)
finalvirtual

Reimplemented from OperatorBase.

Definition at line 181 of file ACForce.cpp.

References ACForce::f_epsilon_, ACForce::first_force_index_, ParticleSet::getTotalNum(), ACForce::hf_force_, ACForce::ions_, OHMMS_DIM, ACForce::pulay_force_, ACForce::sw_grad_, ACForce::sw_pulay_, OperatorBase::value_, and ACForce::wf_grad_.

182 {
183  int myindex = first_force_index_ + offset;
184  for (int iat = 0; iat < ions_.getTotalNum(); iat++)
185  {
186  for (int iondim = 0; iondim < OHMMS_DIM; iondim++)
187  {
188  plist[myindex++] = -hf_force_[iat][iondim] * f_epsilon_;
189  plist[myindex++] = -(pulay_force_[iat][iondim] + sw_pulay_[iat][iondim]) * f_epsilon_;
190  plist[myindex++] = -value_ * (wf_grad_[iat][iondim] + sw_grad_[iat][iondim]) * f_epsilon_;
191  plist[myindex++] = -(wf_grad_[iat][iondim] + sw_grad_[iat][iondim]) * f_epsilon_;
192  }
193  }
194 };
RealType f_epsilon_
Definition: ACForce.h:100
size_t getTotalNum() const
Definition: ParticleSet.h:493
#define OHMMS_DIM
Definition: config.h:64
Return_t value_
current value
Definition: OperatorBase.h:524
IndexType first_force_index_
For indexing observables.
Definition: ACForce.h:89
Forces hf_force_
Temporary Nion x 3 dimensional arrays for force storage.
Definition: ACForce.h:103
ParticleSet & ions_
Definition: ACForce.h:83

Member Data Documentation

◆ delta_

RealType delta_
private

Finite difference timestep.

Definition at line 78 of file ACForce.h.

Referenced by ACForce::evaluate(), ACForce::makeClone(), and ACForce::put().

◆ elns_

ParticleSet& elns_
private

Definition at line 84 of file ACForce.h.

Referenced by ACForce::ACForce().

◆ f_epsilon_

RealType f_epsilon_
private

◆ fastDerivatives_

bool fastDerivatives_
private

Definition at line 93 of file ACForce.h.

Referenced by ACForce::evaluate(), ACForce::makeClone(), and ACForce::put().

◆ first_force_index_

IndexType first_force_index_
private

For indexing observables.

Definition at line 89 of file ACForce.h.

Referenced by ACForce::addObservables(), ACForce::makeClone(), ACForce::setObservables(), and ACForce::setParticlePropertyList().

◆ ham_

QMCHamiltonian& ham_
private

Definition at line 86 of file ACForce.h.

Referenced by ACForce::evaluate().

◆ hf_force_

Forces hf_force_
private

Temporary Nion x 3 dimensional arrays for force storage.

Definition at line 103 of file ACForce.h.

Referenced by ACForce::ACForce(), ACForce::evaluate(), ACForce::setObservables(), and ACForce::setParticlePropertyList().

◆ ions_

◆ psi_

TrialWaveFunction& psi_
private

Definition at line 85 of file ACForce.h.

Referenced by ACForce::evaluate().

◆ psi_wrapper_

TWFFastDerivWrapper psi_wrapper_
private

Definition at line 110 of file ACForce.h.

Referenced by ACForce::ACForce(), and ACForce::evaluate().

◆ pulay_force_

Forces pulay_force_
private

◆ reg_epsilon_

RealType reg_epsilon_
private

Definition at line 99 of file ACForce.h.

Referenced by ACForce::evaluate(), ACForce::makeClone(), and ACForce::put().

◆ sw_grad_

◆ sw_pulay_

Forces sw_pulay_
private

◆ swt_

The space warp transformation class.

Definition at line 96 of file ACForce.h.

Referenced by ACForce::evaluate(), and ACForce::put().

◆ useSpaceWarp_

bool useSpaceWarp_
private

Algorithm/feature switches.

Definition at line 92 of file ACForce.h.

Referenced by ACForce::evaluate(), ACForce::makeClone(), and ACForce::put().

◆ wf_grad_


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