QMCPACK
FakeSPO.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) 2020 QMCPACK developers.
6 //
7 // File developed by: Mark Dewing, mdewing@anl.gov, Argonne National Laboratory
8 //
9 // File created by: Mark Dewing, mdewing@anl.gov, Argonne National Laboratory
10 //////////////////////////////////////////////////////////////////////////////////////
11 
12 
13 #include "FakeSPO.h"
14 
15 namespace qmcplusplus
16 {
17 
18 FakeSPO::FakeSPO() : SPOSet("one_FakeSPO")
19 {
20  a.resize(3, 3);
21 
22  a(0, 0) = 2.3;
23  a(0, 1) = 4.5;
24  a(0, 2) = 2.6;
25  a(1, 0) = 0.5;
26  a(1, 1) = 8.5;
27  a(1, 2) = 3.3;
28  a(2, 0) = 1.8;
29  a(2, 1) = 4.4;
30  a(2, 2) = 4.9;
31 
32  v.resize(3);
33  v[0] = 1.9;
34  v[1] = 2.0;
35  v[2] = 3.1;
36 
37 
38  a2.resize(4, 4);
39  a2(0, 0) = 2.3;
40  a2(0, 1) = 4.5;
41  a2(0, 2) = 2.6;
42  a2(0, 3) = 1.2;
43  a2(1, 0) = 0.5;
44  a2(1, 1) = 8.5;
45  a2(1, 2) = 3.3;
46  a2(1, 3) = 0.3;
47  a2(2, 0) = 1.8;
48  a2(2, 1) = 4.4;
49  a2(2, 2) = 4.9;
50  a2(2, 3) = 2.8;
51  a2(3, 0) = 0.8;
52  a2(3, 1) = 4.1;
53  a2(3, 2) = 3.2;
54  a2(3, 3) = 1.1;
55 
56  v2.resize(4, 4);
57 
58  v2(0, 0) = 3.2;
59  v2(0, 1) = 0.5;
60  v2(0, 2) = 5.9;
61  v2(0, 3) = 3.7;
62  v2(1, 0) = 0.3;
63  v2(1, 1) = 1.4;
64  v2(1, 2) = 3.9;
65  v2(1, 3) = 8.2;
66  v2(2, 0) = 3.3;
67  v2(2, 1) = 5.4;
68  v2(2, 2) = 4.9;
69  v2(2, 3) = 2.2;
70  v2(3, 1) = 5.4;
71  v2(3, 2) = 4.9;
72  v2(3, 3) = 2.2;
73 
74  gv.resize(4);
75  gv[0] = TinyVector<ValueType, DIM>(1.0, 0.0, 0.1);
76  gv[1] = TinyVector<ValueType, DIM>(1.0, 2.0, 0.1);
77  gv[2] = TinyVector<ValueType, DIM>(2.0, 1.0, 0.1);
78  gv[3] = TinyVector<ValueType, DIM>(0.4, 0.3, 0.1);
79 }
80 
81 std::unique_ptr<SPOSet> FakeSPO::makeClone() const { return std::make_unique<FakeSPO>(*this); }
82 
83 void FakeSPO::setOrbitalSetSize(int norbs) { OrbitalSetSize = norbs; }
84 
85 void FakeSPO::evaluateValue(const ParticleSet& P, int iat, ValueVector& psi)
86 {
87  if (iat < 0)
88  for (int i = 0; i < psi.size(); i++)
89  psi[i] = 1.2 * i - i * i;
90  else if (OrbitalSetSize == 3)
91  for (int i = 0; i < 3; i++)
92  psi[i] = a(iat, i);
93  else if (OrbitalSetSize == 4)
94  for (int i = 0; i < 4; i++)
95  psi[i] = a2(iat, i);
96 }
97 
98 void FakeSPO::evaluateVGL(const ParticleSet& P, int iat, ValueVector& psi, GradVector& dpsi, ValueVector& d2psi)
99 {
100  if (OrbitalSetSize == 3)
101  {
102  for (int i = 0; i < 3; i++)
103  {
104  psi[i] = v[i];
105  dpsi[i] = gv[i];
106  }
107  }
108  else if (OrbitalSetSize == 4)
109  {
110  for (int i = 0; i < 4; i++)
111  {
112  psi[i] = v2(iat, i);
113  dpsi[i] = gv[i];
114  }
115  }
116 }
117 
119  int first,
120  int last,
121  ValueMatrix& logdet,
122  GradMatrix& dlogdet,
123  ValueMatrix& d2logdet)
124 {
125  if (OrbitalSetSize == 3)
126  {
127  for (int i = 0; i < 3; i++)
128  for (int j = 0; j < 3; j++)
129  {
130  logdet(j, i) = a(i, j);
131  dlogdet[i][j] = gv[j] + GradType(i);
132  }
133  }
134  else if (OrbitalSetSize == 4)
135  {
136  for (int i = 0; i < 4; i++)
137  for (int j = 0; j < 4; j++)
138  {
139  logdet(j, i) = a2(i, j);
140  dlogdet[i][j] = gv[j] + GradType(i);
141  }
142  }
143 }
144 
145 } // namespace qmcplusplus
base class for Single-particle orbital sets
Definition: SPOSet.h:46
void resize(size_type n, Type_t val=Type_t())
Resize the container.
Definition: OhmmsVector.h:166
Fixed-size array.
Definition: OhmmsTinyMeta.h:30
Matrix< ValueType > v2
Definition: FakeSPO.h:27
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
void evaluateValue(const ParticleSet &P, int iat, ValueVector &psi) override
evaluate the values of this single-particle orbital set
Definition: FakeSPO.cpp:85
QTBase::GradType GradType
Definition: Configuration.h:62
SPOSet::GradVector gv
Definition: FakeSPO.h:29
OrbitalSetTraits< ValueType >::ValueMatrix ValueMatrix
Definition: SPOSet.h:50
void setOrbitalSetSize(int norbs) override
set the OrbitalSetSize
Definition: FakeSPO.cpp:83
void resize(size_type n, size_type m)
Resize the container.
Definition: OhmmsMatrix.h:99
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: FakeSPO.cpp:81
OrbitalSetTraits< ValueType >::ValueVector ValueVector
Definition: SPOSet.h:49
IndexType OrbitalSetSize
number of Single-particle orbitals
Definition: SPOSet.h:566
Matrix< ValueType > a2
Definition: FakeSPO.h:25
void evaluateVGL(const ParticleSet &P, int iat, ValueVector &psi, GradVector &dpsi, ValueVector &d2psi) override
evaluate the values, gradients and laplacians of this single-particle orbital set ...
Definition: FakeSPO.cpp:98
OrbitalSetTraits< ValueType >::GradVector GradVector
Definition: SPOSet.h:51
void evaluate_notranspose(const ParticleSet &P, int first, int last, ValueMatrix &logdet, GradMatrix &dlogdet, ValueMatrix &d2logdet) override
evaluate the values, gradients and laplacians of this single-particle orbital for [first...
Definition: FakeSPO.cpp:118
Vector< ValueType > v
Definition: FakeSPO.h:26
Matrix< ValueType > a
Definition: FakeSPO.h:24