QMCPACK
FreeOrbital.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: Miguel Morales, moralessilva2@llnl.gov, Lawrence Livermore National Laboratory
8 // Jeremy McMinnis, jmcminis@gmail.com, University of Illinois at Urbana-Champaign
9 // Jeongnim Kim, jeongnim.kim@gmail.com, University of Illinois at Urbana-Champaign
10 // Jaron T. Krogel, krogeljt@ornl.gov, Oak Ridge National Laboratory
11 // Mark A. Berrill, berrillma@ornl.gov, Oak Ridge National Laboratory
12 // Yubo "Paul" Yang, yubo.paul.yang@gmail.com, CCQ @ Flatiron
13 //
14 // File created by: Jeongnim Kim, jeongnim.kim@gmail.com, University of Illinois at Urbana-Champaign
15 //////////////////////////////////////////////////////////////////////////////////////
16 
17 #ifndef QMCPLUSPLUS_FREE_ORBITAL
18 #define QMCPLUSPLUS_FREE_ORBITAL
19 
21 
22 namespace qmcplusplus
23 {
24 class FreeOrbital : public SPOSet
25 {
26 public:
27  FreeOrbital(const std::string& my_name, const std::vector<PosType>& kpts_cart);
28  ~FreeOrbital();
29 
30  std::string getClassName() const override { return "FreeOrbital"; }
31 
32  // phi[i][j] is phi_j(r_i), i.e. electron i in orbital j
33  // i \in [first, last)
34  void evaluate_notranspose(const ParticleSet& P,
35  int first,
36  int last,
37  ValueMatrix& phi,
38  GradMatrix& dphi,
39  ValueMatrix& d2phi) override;
40 
41  // plug r_i into all orbitals
42  void evaluateVGL(const ParticleSet& P, int i, ValueVector& pvec, GradVector& dpvec, ValueVector& d2pvec) override;
43  void evaluateValue(const ParticleSet& P, int iat, ValueVector& pvec) override;
44 
45  // hessian matrix is needed by backflow
46  void evaluate_notranspose(const ParticleSet& P,
47  int first,
48  int last,
49  ValueMatrix& phi,
50  GradMatrix& dphi,
51  HessMatrix& d2phi_mat) override;
52 
53  // derivative of hessian is needed to optimize backflow
54  void evaluate_notranspose(const ParticleSet& P,
55  int first,
56  int last,
57  ValueMatrix& phi,
58  GradMatrix& dphi,
59  HessMatrix& d2phi_mat,
60  GGGMatrix& d3phi_mat) override;
61 
62  void report(const std::string& pad) const override;
63  // ---- begin required overrides
64  std::unique_ptr<SPOSet> makeClone() const override { return std::make_unique<FreeOrbital>(*this); }
65  void setOrbitalSetSize(int norbs) override { throw std::runtime_error("not implemented"); }
66  // required overrides end ----
67 private:
68  const std::vector<PosType> kvecs; // kvecs vectors
69  const int mink; // minimum k index
70  const int maxk; // maximum number of kvecs vectors
71  std::vector<RealType> k2neg; // minus kvecs^2
72 };
73 
74 } // namespace qmcplusplus
75 #endif
base class for Single-particle orbital sets
Definition: SPOSet.h:46
std::string getClassName() const override
return class name
Definition: FreeOrbital.h:30
void setOrbitalSetSize(int norbs) override
set the OrbitalSetSize
Definition: FreeOrbital.h:65
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
std::vector< RealType > k2neg
Definition: FreeOrbital.h:71
FreeOrbital(const std::string &my_name, const std::vector< PosType > &kpts_cart)
Definition: FreeOrbital.cpp:6
OrbitalSetTraits< ValueType >::ValueMatrix ValueMatrix
Definition: SPOSet.h:50
void evaluate_notranspose(const ParticleSet &P, int first, int last, ValueMatrix &phi, GradMatrix &dphi, ValueMatrix &d2phi) override
evaluate the values, gradients and laplacians of this single-particle orbital for [first...
Definition: FreeOrbital.cpp:78
const std::vector< PosType > kvecs
Definition: FreeOrbital.h:68
void evaluateValue(const ParticleSet &P, int iat, ValueVector &pvec) override
evaluate the values of this single-particle orbital set
Definition: FreeOrbital.cpp:57
OrbitalSetTraits< ValueType >::ValueVector ValueVector
OrbitalSetTraits< ValueType >::GradMatrix GradMatrix
Definition: SPOSet.h:52
Specialized paritlce class for atomistic simulations.
Definition: ParticleSet.h:55
std::unique_ptr< SPOSet > makeClone() const override
make a clone of itself every derived class must implement this to have threading working correctly...
Definition: FreeOrbital.h:64
void report(const std::string &pad) const override
print SPOSet information
void evaluateVGL(const ParticleSet &P, int i, ValueVector &pvec, GradVector &dpvec, ValueVector &d2pvec) override
evaluate the values, gradients and laplacians of this single-particle orbital set ...
Definition: FreeOrbital.cpp:28
OrbitalSetTraits< ValueType >::GradVector GradVector
Definition: SPOSet.h:51
OrbitalSetTraits< ValueType >::GradHessMatrix GGGMatrix
Definition: SPOSet.h:56
OrbitalSetTraits< ValueType >::HessMatrix HessMatrix
Definition: SPOSet.h:54