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

Public Types

using Real = QMCTraits::RealType
 cheat, need to use virtual inheriance to clean up More...
 

Public Member Functions

Real g (Real r)
 
void initVarReduction (Real rcut, int m, int numFuncs)
 
 ForceBase (ParticleSet &ions, ParticleSet &elns)
 
virtual ~ForceBase ()
 
void registerObservablesF (std::vector< ObservableHelper > &h5list, hdf_archive &file) const
 
void addObservablesF (QMCTraits::PropertySetType &plist)
 
void addObservablesStress (QMCTraits::PropertySetType &plist)
 
void setObservablesF (QMCTraits::PropertySetType &plist)
 
void setObservablesStress (QMCTraits::PropertySetType &plist)
 
void setParticleSetF (QMCTraits::PropertySetType &plist, int offset)
 
void setParticleSetStress (QMCTraits::PropertySetType &plist, int offset)
 
bool getAddIonIon () const noexcept
 
void setAddIonIon (bool val) noexcept
 
const ParticleSet::ParticlePosgetForces () const noexcept
 
void setForces (const ParticleSet::ParticlePos &forces)
 
void setForces (Real val)
 
const ParticleSet::ParticlePosgetForcesIonIon () const noexcept
 
void setForcesIonIon (const ParticleSet::ParticlePos &forces_ion_ion)
 
const SymTensor< Real, OHMMS_DIM > & getStressIonIon () const noexcept
 
const SymTensor< Real, OHMMS_DIM > & getStressEE () const noexcept
 
const SymTensor< Real, OHMMS_DIM > & getStressEI () const noexcept
 
const SymTensor< Real, OHMMS_DIM > & getStressKin () const noexcept
 
const SymTensor< Real, OHMMS_DIM > & getStress () const noexcept
 

Protected Attributes

int first_force_index_
 
int n_nuc_
 
int n_el_
 
int tries_
 
bool first_time_
 
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. More...
 
ParticleSetions_
 
ParticleSet::ParticlePos forces_
 
ParticleSet::ParticlePos forces_ion_ion_
 
SymTensor< Real, OHMMS_DIMstress_ion_ion_
 
SymTensor< Real, OHMMS_DIMstress_ee_
 
SymTensor< Real, OHMMS_DIMstress_ei_
 
SymTensor< Real, OHMMS_DIMstress_kin_
 
SymTensor< Real, OHMMS_DIMstress_
 
std::string prefix_
 
std::string pair_name_
 
Real rcut_
 
int m_
 
std::vector< Realck_
 

Detailed Description

Definition at line 25 of file ForceBase.h.

Member Typedef Documentation

◆ Real

cheat, need to use virtual inheriance to clean up

Definition at line 29 of file ForceBase.h.

Constructor & Destructor Documentation

◆ ForceBase()

ForceBase ( ParticleSet ions,
ParticleSet elns 
)

Definition at line 28 of file ForceBase.cpp.

References ForceBase::forces_, ForceBase::forces_ion_ion_, OhmmsElementBase::getName(), ForceBase::n_nuc_, ForceBase::pair_name_, and Vector< T, Alloc >::resize().

29  : first_force_index_(-1),
30  n_nuc_(ions.getTotalNum()),
31  n_el_(elns.getTotalNum()),
32  tries_(0),
33  first_time_(true),
34  add_ion_ion_(true),
35  ions_(ions)
36 {
37  ReportEngine PRE("ForceBase", "ForceBase");
38  pair_name_ = elns.getName() + "-" + ions.getName();
40  forces_ = 0.0;
42  forces_ion_ion_ = 0.0;
43 }
void resize(size_type n, Type_t val=Type_t())
Resize the container.
Definition: OhmmsVector.h:166
ParticleSet::ParticlePos forces_
Definition: ForceBase.h:87
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
std::string pair_name_
Definition: ForceBase.h:97
ParticleSet::ParticlePos forces_ion_ion_
Definition: ForceBase.h:88
ParticleSet & ions_
Definition: ForceBase.h:86

◆ ~ForceBase()

~ForceBase ( )
virtual

Definition at line 45 of file ForceBase.cpp.

45 {}

Member Function Documentation

◆ addObservablesF()

void addObservablesF ( QMCTraits::PropertySetType plist)

Definition at line 47 of file ForceBase.cpp.

References RecordNamedProperty< T >::add(), ForceBase::first_force_index_, ForceBase::n_nuc_, OHMMS_DIM, ForceBase::prefix_, and RecordNamedProperty< T >::size().

Referenced by BareForce::addObservables(), ForceCeperley::addObservables(), ForceChiesaPBCAA::addObservables(), CoulombPotential< T >::addObservables(), CoulombPBCAA::addObservables(), and CoulombPBCAB::addObservables().

48 {
49  if (first_force_index_ < 0)
50  first_force_index_ = plist.size();
51  for (int iat = 0; iat < n_nuc_; iat++)
52  {
53  for (int x = 0; x < OHMMS_DIM; x++)
54  {
55  std::ostringstream obsName;
56  obsName << prefix_ << "_" << iat << "_" << x;
57  plist.add(obsName.str());
58  }
59  }
60 }
std::string prefix_
Definition: ForceBase.h:96
#define OHMMS_DIM
Definition: config.h:64

◆ addObservablesStress()

void addObservablesStress ( QMCTraits::PropertySetType plist)

Definition at line 62 of file ForceBase.cpp.

References RecordNamedProperty< T >::add(), ForceBase::first_force_index_, OHMMS_DIM, ForceBase::prefix_, and RecordNamedProperty< T >::size().

Referenced by StressPBC::addObservables().

63 {
64  if (first_force_index_ < 0)
65  first_force_index_ = plist.size();
66  for (int i = 0; i < OHMMS_DIM; i++)
67  for (int j = i; j < OHMMS_DIM; j++)
68  {
69  std::ostringstream obsName;
70  obsName << prefix_ << "_" << i << "_" << j;
71  plist.add(obsName.str());
72  }
73 }
std::string prefix_
Definition: ForceBase.h:96
#define OHMMS_DIM
Definition: config.h:64

◆ g()

Real g ( Real  r)
inline

Definition at line 31 of file ForceBase.h.

References ForceBase::ck_, ForceBase::m_, and ForceBase::rcut_.

Referenced by ForceBase::initVarReduction().

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  }
std::vector< Real > ck_
Definition: ForceBase.h:103
QMCTraits::RealType Real
cheat, need to use virtual inheriance to clean up
Definition: ForceBase.h:29

◆ getAddIonIon()

bool getAddIonIon ( ) const
inlinenoexcept

Definition at line 61 of file ForceBase.h.

References ForceBase::add_ion_ion_.

Referenced by qmcplusplus::check_force_copy(), and qmcplusplus::TEST_CASE().

61 { return add_ion_ion_; }
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

◆ getForces()

const ParticleSet::ParticlePos& getForces ( ) const
inlinenoexcept

Definition at line 64 of file ForceBase.h.

References ForceBase::forces_.

Referenced by qmcplusplus::TEST_CASE().

64 { return forces_; }
ParticleSet::ParticlePos forces_
Definition: ForceBase.h:87

◆ getForcesIonIon()

const ParticleSet::ParticlePos& getForcesIonIon ( ) const
inlinenoexcept

Definition at line 68 of file ForceBase.h.

References ForceBase::forces_ion_ion_.

Referenced by qmcplusplus::check_force_copy(), and qmcplusplus::TEST_CASE().

68 { return forces_ion_ion_; }
ParticleSet::ParticlePos forces_ion_ion_
Definition: ForceBase.h:88

◆ getStress()

const SymTensor<Real, OHMMS_DIM>& getStress ( ) const
inlinenoexcept

Definition at line 75 of file ForceBase.h.

References ForceBase::stress_.

75 { return stress_; }
SymTensor< Real, OHMMS_DIM > stress_
Definition: ForceBase.h:94

◆ getStressEE()

const SymTensor<Real, OHMMS_DIM>& getStressEE ( ) const
inlinenoexcept

Definition at line 72 of file ForceBase.h.

References ForceBase::stress_ee_.

Referenced by qmcplusplus::TEST_CASE().

72 { return stress_ee_; }
SymTensor< Real, OHMMS_DIM > stress_ee_
Definition: ForceBase.h:91

◆ getStressEI()

const SymTensor<Real, OHMMS_DIM>& getStressEI ( ) const
inlinenoexcept

Definition at line 73 of file ForceBase.h.

References ForceBase::stress_ei_.

Referenced by qmcplusplus::TEST_CASE().

73 { return stress_ei_; }
SymTensor< Real, OHMMS_DIM > stress_ei_
Definition: ForceBase.h:92

◆ getStressIonIon()

const SymTensor<Real, OHMMS_DIM>& getStressIonIon ( ) const
inlinenoexcept

Definition at line 71 of file ForceBase.h.

References ForceBase::stress_ion_ion_.

71 { return stress_ion_ion_; }
SymTensor< Real, OHMMS_DIM > stress_ion_ion_
Definition: ForceBase.h:90

◆ getStressKin()

const SymTensor<Real, OHMMS_DIM>& getStressKin ( ) const
inlinenoexcept

Definition at line 74 of file ForceBase.h.

References ForceBase::stress_kin_.

74 { return stress_kin_; }
SymTensor< Real, OHMMS_DIM > stress_kin_
Definition: ForceBase.h:93

◆ initVarReduction()

void initVarReduction ( Real  rcut,
int  m,
int  numFuncs 
)

Definition at line 145 of file ForceBase.cpp.

References qmcplusplus::app_log(), ForceBase::ck_, ForceBase::g(), qmcplusplus::invert_matrix(), qmcplusplus::Units::distance::m, ForceBase::m_, qmcplusplus::pow(), and ForceBase::rcut_.

146 {
147  m_ = m;
148  rcut_ = rcut;
149  std::vector<Real> h(numFuncs);
150  Matrix<Real> S(numFuncs, numFuncs);
151  ck_.resize(numFuncs, 0.0);
152  Real R2jp1 = rcut_ * rcut_;
153  Real R2m = 1.0;
154  for (int i = 0; i < m_; i++)
155  R2m *= rcut_;
156  for (int j = 1; j <= numFuncs; j++)
157  {
158  h[j - 1] = R2jp1 / Real(j + 1);
159  Real R2k = rcut_;
160  for (int k = 1; k <= numFuncs; k++)
161  {
162  S(k - 1, j - 1) = R2m * R2k * R2jp1 / (Real)(m_ + k + j + 1);
163  S(k - 1, j - 1) = std::pow(rcut_, (m_ + k + j + 1)) / (m_ + k + j + 1.0);
164  R2k *= rcut_;
165  }
166  R2jp1 *= rcut_;
167  }
168  invert_matrix(S, false);
169  for (int i = 0; i < numFuncs; i++)
170  {
171  for (int j = 0; j < numFuncs; j++)
172  ck_[i] += S(i, j) * h[j];
173  }
174  FILE* fout = fopen("g_r.dat", "w");
175  for (double r = 0.0; r < rcut_; r += 0.001)
176  fprintf(fout, "%1.10f %1.10e\n", r, g(r));
177  fclose(fout);
178  app_log() << "Initialized variance reduction coefs.\n";
179 }
MatrixA::value_type invert_matrix(MatrixA &M, bool getdet=true)
invert a matrix
std::vector< Real > ck_
Definition: ForceBase.h:103
std::ostream & app_log()
Definition: OutputManager.h:65
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)
QMCTraits::RealType Real
cheat, need to use virtual inheriance to clean up
Definition: ForceBase.h:29
Real g(Real r)
Definition: ForceBase.h:31

◆ registerObservablesF()

void registerObservablesF ( std::vector< ObservableHelper > &  h5list,
hdf_archive file 
) const

Definition at line 75 of file ForceBase.cpp.

References ForceBase::first_force_index_, ForceBase::n_nuc_, OHMMS_DIM, and ForceBase::prefix_.

Referenced by BareForce::registerObservables(), ForceCeperley::registerObservables(), ForceChiesaPBCAA::registerObservables(), and StressPBC::registerObservables().

76 {
77  std::vector<int> ndim(2);
78  ndim[0] = n_nuc_;
79  ndim[1] = OHMMS_DIM;
80 
81  h5list.emplace_back(hdf_path{prefix_});
82  auto& h5o = h5list.back();
83  h5o.set_dimensions(ndim, first_force_index_);
84 }
std::string prefix_
Definition: ForceBase.h:96
#define OHMMS_DIM
Definition: config.h:64

◆ setAddIonIon()

void setAddIonIon ( bool  val)
inlinenoexcept

Definition at line 62 of file ForceBase.h.

References ForceBase::add_ion_ion_.

Referenced by qmcplusplus::TEST_CASE().

62 { add_ion_ion_ = val; }
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

◆ setForces() [1/2]

void setForces ( const ParticleSet::ParticlePos forces)

Definition at line 139 of file ForceBase.cpp.

References ForceBase::forces_.

Referenced by qmcplusplus::TEST_CASE().

139 { forces_ = forces; }
ParticleSet::ParticlePos forces_
Definition: ForceBase.h:87

◆ setForces() [2/2]

void setForces ( Real  val)

Definition at line 141 of file ForceBase.cpp.

References ForceBase::forces_.

141 { forces_ = val; }
ParticleSet::ParticlePos forces_
Definition: ForceBase.h:87

◆ setForcesIonIon()

void setForcesIonIon ( const ParticleSet::ParticlePos forces_ion_ion)

Definition at line 143 of file ForceBase.cpp.

References ForceBase::forces_ion_ion_.

143 { forces_ion_ion_ = forces_ion_ion; }
ParticleSet::ParticlePos forces_ion_ion_
Definition: ForceBase.h:88

◆ setObservablesF()

void setObservablesF ( QMCTraits::PropertySetType plist)

Definition at line 86 of file ForceBase.cpp.

References ForceBase::first_force_index_, ForceBase::forces_, ForceBase::n_nuc_, and OHMMS_DIM.

Referenced by BareForce::setObservables(), ForceCeperley::setObservables(), ForceChiesaPBCAA::setObservables(), CoulombPBCAA::setObservables(), CoulombPBCAB::setObservables(), and CoulombPotential< T >::setObservables().

87 {
88  int index = first_force_index_;
89  for (int iat = 0; iat < n_nuc_; iat++)
90  {
91  for (int x = 0; x < OHMMS_DIM; x++)
92  {
93  plist[index] = forces_[iat][x];
94  index++;
95  }
96  }
97 }
ParticleSet::ParticlePos forces_
Definition: ForceBase.h:87
#define OHMMS_DIM
Definition: config.h:64

◆ setObservablesStress()

void setObservablesStress ( QMCTraits::PropertySetType plist)

Definition at line 99 of file ForceBase.cpp.

References ForceBase::first_force_index_, OHMMS_DIM, and ForceBase::stress_.

Referenced by StressPBC::setObservables().

100 {
101  int index = first_force_index_;
102  for (int iat = 0; iat < OHMMS_DIM; iat++)
103  {
104  for (int jat = iat; jat < OHMMS_DIM; jat++)
105  {
106  plist[index] = stress_(iat, jat);
107  index++;
108  }
109  }
110 }
#define OHMMS_DIM
Definition: config.h:64
SymTensor< Real, OHMMS_DIM > stress_
Definition: ForceBase.h:94

◆ setParticleSetF()

void setParticleSetF ( QMCTraits::PropertySetType plist,
int  offset 
)

Definition at line 113 of file ForceBase.cpp.

References ForceBase::first_force_index_, ForceBase::forces_, ForceBase::n_nuc_, and OHMMS_DIM.

Referenced by BareForce::setParticlePropertyList(), ForceCeperley::setParticlePropertyList(), ForceChiesaPBCAA::setParticlePropertyList(), CoulombPBCAA::setParticlePropertyList(), CoulombPBCAB::setParticlePropertyList(), and CoulombPotential< T >::setParticlePropertyList().

114 {
115  int index = first_force_index_ + offset;
116  for (int iat = 0; iat < n_nuc_; iat++)
117  {
118  for (int x = 0; x < OHMMS_DIM; x++)
119  {
120  plist[index] = forces_[iat][x];
121  index++;
122  }
123  }
124 }
ParticleSet::ParticlePos forces_
Definition: ForceBase.h:87
#define OHMMS_DIM
Definition: config.h:64

◆ setParticleSetStress()

void setParticleSetStress ( QMCTraits::PropertySetType plist,
int  offset 
)

Definition at line 126 of file ForceBase.cpp.

References ForceBase::first_force_index_, OHMMS_DIM, and ForceBase::stress_.

Referenced by StressPBC::setParticlePropertyList().

127 {
128  int index = first_force_index_ + offset;
129  for (int iat = 0; iat < OHMMS_DIM; iat++)
130  {
131  for (int jat = iat; jat < OHMMS_DIM; jat++)
132  {
133  plist[index] = stress_(iat, jat);
134  index++;
135  }
136  }
137 }
#define OHMMS_DIM
Definition: config.h:64
SymTensor< Real, OHMMS_DIM > stress_
Definition: ForceBase.h:94

Member Data Documentation

◆ add_ion_ion_

bool add_ion_ion_
protected

Determines if ion-ion force will be added to electron-ion force in derived force estimators. If false, forces_ion_ion_=0.0.

Definition at line 84 of file ForceBase.h.

Referenced by ForceCeperley::evaluate(), ForceChiesaPBCAA::evaluate(), StressPBC::evaluate(), ForceBase::getAddIonIon(), StressPBC::makeClone(), ForceChiesaPBCAA::makeClone(), BareForce::put(), ForceCeperley::put(), StressPBC::put(), ForceChiesaPBCAA::put(), and ForceBase::setAddIonIon().

◆ ck_

std::vector<Real> ck_
protected

Definition at line 103 of file ForceBase.h.

Referenced by ForceBase::g(), and ForceBase::initVarReduction().

◆ first_force_index_

◆ first_time_

bool first_time_
protected

Definition at line 82 of file ForceBase.h.

Referenced by ForceCeperley::put().

◆ forces_

◆ forces_ion_ion_

◆ ions_

ParticleSet& ions_
protected

◆ m_

int m_
protected

Definition at line 102 of file ForceBase.h.

Referenced by ForceBase::g(), and ForceBase::initVarReduction().

◆ n_el_

int n_el_
protected

Definition at line 80 of file ForceBase.h.

Referenced by ForceCeperley::evaluate().

◆ n_nuc_

◆ pair_name_

std::string pair_name_
protected

◆ prefix_

◆ rcut_

Real rcut_
protected

Definition at line 101 of file ForceBase.h.

Referenced by ForceBase::g(), and ForceBase::initVarReduction().

◆ stress_

◆ stress_ee_

SymTensor<Real, OHMMS_DIM> stress_ee_
protected

Definition at line 91 of file ForceBase.h.

Referenced by StressPBC::evaluate(), and ForceBase::getStressEE().

◆ stress_ei_

SymTensor<Real, OHMMS_DIM> stress_ei_
protected

Definition at line 92 of file ForceBase.h.

Referenced by StressPBC::evaluate(), and ForceBase::getStressEI().

◆ stress_ion_ion_

◆ stress_kin_

SymTensor<Real, OHMMS_DIM> stress_kin_
protected

Definition at line 93 of file ForceBase.h.

Referenced by StressPBC::evaluate(), and ForceBase::getStressKin().

◆ tries_

int tries_
protected

Definition at line 81 of file ForceBase.h.

Referenced by BareForce::evaluate().


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