QMCPACK
BareForce.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: John R. Gergely, University of Illinois at Urbana-Champaign
8 // Ken Esler, kpesler@gmail.com, University of Illinois at Urbana-Champaign
9 // Jeongnim Kim, jeongnim.kim@gmail.com, University of Illinois at Urbana-Champaign
10 // Jeremy McMinnis, jmcminis@gmail.com, University of Illinois at Urbana-Champaign
11 // Raymond Clay III, j.k.rofling@gmail.com, Lawrence Livermore National Laboratory
12 // Mark A. Berrill, berrillma@ornl.gov, Oak Ridge National Laboratory
13 //
14 // File created by: John R. Gergely, University of Illinois at Urbana-Champaign
15 //////////////////////////////////////////////////////////////////////////////////////
16 
17 #include "BareForce.h"
18 #include "Particle/ParticleSet.h"
19 #include "Particle/DistanceTable.h"
20 #include "OhmmsData/AttributeSet.h"
21 
22 namespace qmcplusplus
23 {
24 BareForce::BareForce(ParticleSet& ions, ParticleSet& elns) : ForceBase(ions, elns), d_ei_id_(elns.addTable(ions))
25 {
26  name_ = "HF_Force_Base";
27  prefix_ = "HFBase";
28 }
29 
30 std::string BareForce::getClassName() const { return "BareForce"; }
31 
33 
34 std::unique_ptr<OperatorBase> BareForce::makeClone(ParticleSet& qp, TrialWaveFunction& psi)
35 {
36  return std::make_unique<BareForce>(*this);
37 }
38 
39 void BareForce::registerObservables(std::vector<ObservableHelper>& h5list, hdf_archive& file) const
40 {
41  registerObservablesF(h5list, file);
42 }
43 
45 {
46  addObservablesF(plist);
48 }
49 
51 
52 void BareForce::setParticlePropertyList(PropertySetType& plist, int offset) { setParticleSetF(plist, offset); }
53 
55 {
57  const auto& d_ab = P.getDistTableAB(d_ei_id_);
58  const ParticleSet::Scalar_t* restrict Zat = ions_.Z.first_address();
59  const ParticleSet::Scalar_t* restrict Qat = P.Z.first_address();
60  //Loop over distinct eln-ion pairs
61  for (int jat = 0; jat < d_ab.targets(); jat++)
62  {
63  const auto& ab_dist = d_ab.getDistRow(jat);
64  const auto& ab_displ = d_ab.getDisplRow(jat);
65  for (int iat = 0; iat < d_ab.sources(); iat++)
66  {
67  Real rinv = 1.0 / ab_dist[iat];
68  Real r3zz = Qat[jat] * Zat[iat] * rinv * rinv * rinv;
69  forces_[iat] += r3zz * ab_displ[iat];
70  }
71  }
72  tries_++;
73  return 0.0;
74 }
75 
76 bool BareForce::put(xmlNodePtr cur)
77 {
78  std::string ionionforce("yes");
79  OhmmsAttributeSet attr;
80  attr.add(prefix_, "name");
81  attr.add(ionionforce, "add_ion_ion_");
82  attr.put(cur);
83  add_ion_ion_ = (ionionforce == "yes" || ionionforce == "true");
84  return true;
85 }
86 
87 bool BareForce::get(std::ostream& os) const
88 {
89  os << "Force Base Hamiltonian: " << pair_name_;
90  return true;
91 }
92 
93 } // namespace qmcplusplus
std::string getClassName() const override
return class name
Definition: BareForce.cpp:30
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
std::unique_ptr< OperatorBase > makeClone(ParticleSet &qp, TrialWaveFunction &psi) final
Definition: BareForce.cpp:34
ParticleSet::ParticlePos forces_
Definition: ForceBase.h:87
int my_index_
starting index of this object
Definition: OperatorBase.h:535
bool put(xmlNodePtr cur)
assign attributes to the set
Definition: AttributeSet.h:55
void addObservablesF(QMCTraits::PropertySetType &plist)
Definition: ForceBase.cpp:47
class to handle hdf file
Definition: hdf_archive.h:51
Vectorized record engine for scalar properties.
std::string prefix_
Definition: ForceBase.h:96
void resetTargetParticleSet(ParticleSet &P) override
Reset the data with the target ParticleSet.
Definition: BareForce.cpp:32
void registerObservablesF(std::vector< ObservableHelper > &h5list, hdf_archive &file) const
Definition: ForceBase.cpp:75
const DistanceTableAB & getDistTableAB(int table_ID) const
get a distance table by table_ID and dyanmic_cast to DistanceTableAB
std::string name_
name of this object
Definition: OperatorBase.h:527
Specialized paritlce class for atomistic simulations.
Definition: ParticleSet.h:55
void setObservables(PropertySetType &plist) override
Set the values evaluated by this object to plist Default implementation is to assign Value which is u...
Definition: BareForce.cpp:50
bool add_ion_ion_
Determines if ion-ion force will be added to electron-ion force in derived force estimators. If false, forces_ion_ion_=0.0.
Definition: ForceBase.h:84
class to handle a set of attributes of an xmlNode
Definition: AttributeSet.h:24
bool put(xmlNodePtr cur) override
Do nothing.
Definition: BareForce.cpp:76
void setParticleSetF(QMCTraits::PropertySetType &plist, int offset)
Definition: ForceBase.cpp:113
void registerObservables(std::vector< ObservableHelper > &h5list, hdf_archive &file) const override
add to observable descriptor for hdf5 The default implementation is to register a scalar for this->va...
Definition: BareForce.cpp:39
ParticleScalar Z
charge of each particle
Definition: ParticleSet.h:89
std::string pair_name_
Definition: ForceBase.h:97
QMCTraits::RealType Real
cheat, need to use virtual inheriance to clean up
Definition: ForceBase.h:29
FullPrecRealType Return_t
type of return value of evaluate
Definition: OperatorBase.h:64
void addObservables(PropertySetType &plist, BufferType &collectables) override
default implementation to add named values to the property list
Definition: BareForce.cpp:44
void setObservablesF(QMCTraits::PropertySetType &plist)
Definition: ForceBase.cpp:86
Class to represent a many-body trial wave function.
Return_t evaluate(ParticleSet &P) override
Evaluate the local energy contribution of this component.
Definition: BareForce.cpp:54
void setParticlePropertyList(PropertySetType &plist, int offset) override
Definition: BareForce.cpp:52
ParticleSet::ParticlePos forces_ion_ion_
Definition: ForceBase.h:88
bool get(std::ostream &os) const override
write about the class
Definition: BareForce.cpp:87
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
BareForce(ParticleSet &ions, ParticleSet &elns)
Definition: BareForce.cpp:24
ParticleSet & ions_
Definition: ForceBase.h:86