QMCPACK
EwaldHandler2D.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) 2022 QMCPACK developers.
6 //
7 // File developed by: Yubo "Paul" Yang, yubo.paul.yang@gmail.com, CCQ @ Flatiron
8 //
9 // File created by: Yubo "Paul" Yang, yubo.paul.yang@gmail.com, CCQ @ Flatiron
10 //////////////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef QMCPLUSPLUS_EWALD2D_HANDLER_H
13 #define QMCPLUSPLUS_EWALD2D_HANDLER_H
14 
16 
17 namespace qmcplusplus
18 {
19 /* LR breakup for the standard Ewald method in 2D
20  * 1/r = \left[ \sum_r erfc(\alpha*r)/r + erf(\alpha*r)/r \right]
21  * = \left[ \sum_r erfc(\alpha*r)/r \right] +
22  * \left[ \sum_k 2\pi/k * erfc(k/(2*\alpha)) \right]
23  */
25 {
26 public:
27  EwaldHandler2D(ParticleSet& ref, mRealType kc_in=-1.0);
28 
29  // copy constructor
30  LRHandlerBase* makeClone(ParticleSet& ref) const override { return new EwaldHandler2D(*this); }
31 
32  // short-range part
33  inline mRealType evaluate(mRealType r, mRealType rinv) const override { return erfc(alpha*r) * rinv; }
34  inline mRealType evaluateLR_r0() const override { return 2.0 * alpha / std::sqrt(M_PI); }
35 
36  // long-range part
37  inline mRealType evaluateLR(mRealType r) const override { return erf(alpha*r) / r; }
38  inline mRealType evaluateSR_k0() const override { return 2.0 * std::sqrt(M_PI) / (alpha*area); }
39  void fillFk(const KContainer& KList);
40 
41  // begin required overrides
42  inline mRealType srDf(mRealType r, mRealType rinv) const override
43  {
44  throw std::runtime_error("2D Ewald sr derivative not implemented");
45  }
46  inline mRealType lrDf(mRealType r) const override
47  {
48  throw std::runtime_error("2D Ewald lr derivative not implemented");
49  }
50  virtual mRealType evaluate_vlr_k(mRealType k) const override
51  {
52  throw std::runtime_error("2D Ewald vlr_k not implemented");
53  }
54  void initBreakup(ParticleSet& ref) override {}
55  void Breakup(ParticleSet& ref, mRealType rs_in) override { initBreakup(ref); }
56  void resetTargetParticleSet(ParticleSet& ref) override {}
57  // overrides end
58 private:
61 };
62 } // qmcplusplus
63 #endif
EwaldHandler2D(ParticleSet &ref, mRealType kc_in=-1.0)
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
LRHandlerBase * makeClone(ParticleSet &ref) const override
make clone
EwaldHandler3D::mRealType mRealType
void fillFk(const KContainer &KList)
void Breakup(ParticleSet &ref, mRealType rs_in) override
Specialized paritlce class for atomistic simulations.
Definition: ParticleSet.h:55
mRealType evaluate(mRealType r, mRealType rinv) const override
void initBreakup(ParticleSet &ref) override
mRealType evaluateLR(mRealType r) const override
void resetTargetParticleSet(ParticleSet &ref) override
Container for k-points.
Definition: KContainer.h:29
MakeReturn< UnaryNode< FnSqrt, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sqrt(const Vector< T1, C1 > &l)
mRealType evaluateLR_r0() const override
evaluate for the self-interaction term
base class for LRHandlerTemp<FUNC,BASIS> and DummyLRHanlder<typename Func>
Definition: LRHandlerBase.h:30
virtual mRealType evaluate_vlr_k(mRealType k) const override
mRealType lrDf(mRealType r) const override
mRealType evaluateSR_k0() const override
evaluate
Define LRHandlerBase and DummyLRHandler<typename Func>
mRealType srDf(mRealType r, mRealType rinv) const override