QMCPACK
ForceBase.h
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 
18 #ifndef QMCPLUSPLUS_FORCE_BASE_HAMILTONIAN_H
19 #define QMCPLUSPLUS_FORCE_BASE_HAMILTONIAN_H
21 #include "Particle/ParticleSet.h"
22 
23 namespace qmcplusplus
24 {
25 class ForceBase
26 {
27 public:
28  /** cheat, need to use virtual inheriance to clean up*/
30 
31  inline Real g(Real r)
32  {
33  if (r > rcut_)
34  return 1.0;
35  Real sum = 0.0;
36  Real r2kplusm = r;
37  for (int i = 0; i < m_; i++)
38  r2kplusm *= r;
39  for (int k = 0; k < ck_.size(); k++)
40  {
41  sum += ck_[k] * r2kplusm;
42  r2kplusm *= r;
43  }
44  return sum;
45  }
46 
47  void initVarReduction(Real rcut, int m, int numFuncs);
48 
49  ForceBase(ParticleSet& ions, ParticleSet& elns);
50  virtual ~ForceBase();
51 
52  void registerObservablesF(std::vector<ObservableHelper>& h5list, hdf_archive& file) const;
53 
58  void setParticleSetF(QMCTraits::PropertySetType& plist, int offset);
59  void setParticleSetStress(QMCTraits::PropertySetType& plist, int offset);
60 
61  bool getAddIonIon() const noexcept { return add_ion_ion_; }
62  void setAddIonIon(bool val) noexcept { add_ion_ion_ = val; }
63 
64  const ParticleSet::ParticlePos& getForces() const noexcept { return forces_; }
65  void setForces(const ParticleSet::ParticlePos& forces);
66  void setForces(Real val);
67 
68  const ParticleSet::ParticlePos& getForcesIonIon() const noexcept { return forces_ion_ion_; }
69  void setForcesIonIon(const ParticleSet::ParticlePos& forces_ion_ion);
70 
71  const SymTensor<Real, OHMMS_DIM>& getStressIonIon() const noexcept { return stress_ion_ion_; }
72  const SymTensor<Real, OHMMS_DIM>& getStressEE() const noexcept { return stress_ee_; }
73  const SymTensor<Real, OHMMS_DIM>& getStressEI() const noexcept { return stress_ei_; }
74  const SymTensor<Real, OHMMS_DIM>& getStressKin() const noexcept { return stress_kin_; }
75  const SymTensor<Real, OHMMS_DIM>& getStress() const noexcept { return stress_; }
76 
77 protected:
79  int n_nuc_;
80  int n_el_;
81  int tries_;
83  /// Determines if ion-ion force will be added to electron-ion force in derived force estimators. If false, forces_ion_ion_=0.0.
85 
89 
95 
96  std::string prefix_;
97  std::string pair_name_;
98 
99  // Data for variance reduction of Chiesa et al.
100  // PRL 94, 036404 (2005)
102  int m_;
103  std::vector<Real> ck_;
104 };
105 
106 } // namespace qmcplusplus
107 #endif
void setForcesIonIon(const ParticleSet::ParticlePos &forces_ion_ion)
Definition: ForceBase.cpp:143
void setObservablesStress(QMCTraits::PropertySetType &plist)
Definition: ForceBase.cpp:99
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
std::vector< Real > ck_
Definition: ForceBase.h:103
void setForces(const ParticleSet::ParticlePos &forces)
Definition: ForceBase.cpp:139
QTBase::RealType RealType
Definition: Configuration.h:58
SymTensor< Real, OHMMS_DIM > stress_ee_
Definition: ForceBase.h:91
ParticleSet::ParticlePos forces_
Definition: ForceBase.h:87
const SymTensor< Real, OHMMS_DIM > & getStressKin() const noexcept
Definition: ForceBase.h:74
void addObservablesF(QMCTraits::PropertySetType &plist)
Definition: ForceBase.cpp:47
const SymTensor< Real, OHMMS_DIM > & getStress() const noexcept
Definition: ForceBase.h:75
const SymTensor< Real, OHMMS_DIM > & getStressEE() const noexcept
Definition: ForceBase.h:72
class to handle hdf file
Definition: hdf_archive.h:51
Vectorized record engine for scalar properties.
ForceBase(ParticleSet &ions, ParticleSet &elns)
Definition: ForceBase.cpp:28
Attaches a unit to a Vector for IO.
std::string prefix_
Definition: ForceBase.h:96
SymTensor< Real, OHMMS_DIM > stress_kin_
Definition: ForceBase.h:93
ForceBase::Real Real
Definition: ForceBase.cpp:26
void registerObservablesF(std::vector< ObservableHelper > &h5list, hdf_archive &file) const
Definition: ForceBase.cpp:75
Declaration of ObservableHelper and other helper class for observables.
void initVarReduction(Real rcut, int m, int numFuncs)
Definition: ForceBase.cpp:145
void addObservablesStress(QMCTraits::PropertySetType &plist)
Definition: ForceBase.cpp:62
Specialized paritlce class for atomistic simulations.
Definition: ParticleSet.h:55
void setParticleSetStress(QMCTraits::PropertySetType &plist, int offset)
Definition: ForceBase.cpp:126
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
const SymTensor< Real, OHMMS_DIM > & getStressIonIon() const noexcept
Definition: ForceBase.h:71
void setParticleSetF(QMCTraits::PropertySetType &plist, int offset)
Definition: ForceBase.cpp:113
std::string pair_name_
Definition: ForceBase.h:97
QMCTraits::RealType Real
cheat, need to use virtual inheriance to clean up
Definition: ForceBase.h:29
const ParticleSet::ParticlePos & getForcesIonIon() const noexcept
Definition: ForceBase.h:68
void setObservablesF(QMCTraits::PropertySetType &plist)
Definition: ForceBase.cpp:86
Real g(Real r)
Definition: ForceBase.h:31
SymTensor< Real, OHMMS_DIM > stress_ion_ion_
Definition: ForceBase.h:90
SymTensor< Real, OHMMS_DIM > stress_
Definition: ForceBase.h:94
const SymTensor< Real, OHMMS_DIM > & getStressEI() const noexcept
Definition: ForceBase.h:73
bool getAddIonIon() const noexcept
Definition: ForceBase.h:61
ParticleSet::ParticlePos forces_ion_ion_
Definition: ForceBase.h:88
void setAddIonIon(bool val) noexcept
Definition: ForceBase.h:62
SymTensor< Real, OHMMS_DIM > stress_ei_
Definition: ForceBase.h:92
ParticleSet & ions_
Definition: ForceBase.h:86
const ParticleSet::ParticlePos & getForces() const noexcept
Definition: ForceBase.h:64