QMCPACK
AGPDeterminant.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) 2016 Jeongnim Kim and QMCPACK developers.
6 //
7 // File developed by: Jeongnim Kim, jeongnim.kim@gmail.com, University of Illinois at Urbana-Champaign
8 // Jeremy McMinnis, jmcminis@gmail.com, University of Illinois at Urbana-Champaign
9 // Mark A. Berrill, berrillma@ornl.gov, Oak Ridge National Laboratory
10 //
11 // File created by: Jeongnim Kim, jeongnim.kim@gmail.com, University of Illinois at Urbana-Champaign
12 //////////////////////////////////////////////////////////////////////////////////////
13 
14 
15 #include "AGPDeterminant.h"
19 
20 namespace qmcplusplus
21 {
22 using std::copy;
23 
24 AGPDeterminant::AGPDeterminant(BasisSetType* bs) : GeminalBasis(bs), NumPtcls(0) {}
26 
27 void AGPDeterminant::resize(int nup, int ndown)
28 {
29  BasisSize = GeminalBasis->getBasisSetSize(); //BasisSize=GeminalBasis->size();
30  app_log() << " AGPDetermiant::resize checking size nup, ndown, basis " << nup << " " << ndown << " " << BasisSize
31  << std::endl;
32  if (NumPtcls == 0) //use Numptcls to ensure resizing only once
33  {
34  Lambda.resize(BasisSize, BasisSize);
35  if (nup > ndown)
36  LambdaUP.resize(nup - ndown, BasisSize);
37  Nup = nup;
38  Ndown = ndown;
39  NumPtcls = nup + ndown;
40  psiM.resize(nup, nup);
41  psiM_temp.resize(nup, nup);
42  psiU.resize(nup);
43  psiD.resize(ndown);
44  phiT.resize(NumPtcls, BasisSize);
45  phiTv.resize(BasisSize);
46  WorkSpace.resize(nup);
47  Pivot.resize(nup);
48  dY.resize(NumPtcls, BasisSize);
49  d2Y.resize(NumPtcls, BasisSize);
50  dpsiU.resize(Nup, Nup);
51  dpsiD.resize(Ndown, Nup);
52  d2psiU.resize(Nup, Nup);
53  d2psiD.resize(Ndown, Nup);
54  dpsiUv.resize(Nup);
55  d2psiUv.resize(Nup);
56  dpsiDv.resize(Nup);
57  d2psiDv.resize(Nup);
58  FirstAddressOfdVU = &(dpsiU(0, 0)[0]);
60  FirstAddressOfdVD = &(dpsiD(0, 0)[0]);
62  FirstAddressOfdY = &(dY(0, 0)[0]);
68  FirstAddressOfG = &myG[0][0];
70  }
71 }
72 
73 /** Calculate the log value of the Dirac determinant for particles
74  *@param P input configuration containing N particles
75  *@param G a vector containing N gradients
76  *@param L a vector containing N laplacians
77  *@return the value of the determinant
78  *
79  *\f$ (first,first+nel). \f$ Add the gradient and laplacian
80  *contribution of the determinant to G(radient) and L(aplacian)
81  *for local energy calculations.
82  */
86 {
88  G += myG;
89  L += myL;
90  return log_value_;
91 }
92 
94 {
95  //GeminalBasis->evaluate(P);
97  /* evaluate \f$ psi_{up}(iat)= \sum_{j} C_{ij} \phi_j^{u}({\bf r}_{iat}) \f$
98  * \f$ psi_{down}(iat-Nup) = \sum_{j} C_{ij} \phi_j^{d}({\bf r}_{iat})\f$
99  */
101  for (int u = 0; u < Nup; u++) //paired block
102  {
103  for (int d = 0, jat = Nup; d < Ndown; d++, jat++)
104  {
105  //psiM(d,u) = BLAS::dot(BasisSize,phiT[u],GeminalBasis->Y[jat]);//@@
106  psiM(d, u) = simd::dot(phiT[u], GeminalBasis->Y[jat], BasisSize); //@@
107  }
108  //unpaired block Ndown x unpaired
109  for (int d = Ndown, unpaired = 0; d < Nup; d++, unpaired++)
110  {
111  //psiM(d,u) = BLAS::dot(BasisSize,LambdaUP[unpaired],GeminalBasis->Y[u]);//@@
112  psiM(d, u) = simd::dot(LambdaUP[unpaired], GeminalBasis->Y[u], BasisSize); //@@
113  }
114  }
115  //CurrentDet = Invert(psiM.data(),Nup,Nup,WorkSpace.data(),Pivot.data());
116  InvertWithLog(psiM.data(), Nup, Nup, WorkSpace.data(), Pivot.data(), log_value_);
117  for (int iat = 0; iat < Nup; iat++)
118  {
119  for (int d = 0, jat = Nup; d < Ndown; d++, jat++)
120  {
121  //dpsiU(iat,d)=dot(phiT[jat],GeminalBasis->dy(iat),BasisSize);
122  //d2psiU(iat,d)=dot(phiT[jat],GeminalBasis->d2y(iat),BasisSize);
123  dpsiU(iat, d) = simd::dot(phiT[jat], GeminalBasis->dY[iat], BasisSize); //@@
124  d2psiU(iat, d) = simd::dot(phiT[jat], GeminalBasis->d2Y[iat], BasisSize); //@@
125  }
126  for (int d = Ndown, unpaired = 0; d < Nup; d++, unpaired++)
127  {
128  //dpsiU(iat,d)=dot(LambdaUP[unpaired],GeminalBasis->dy(iat),BasisSize);
129  //d2psiU(iat,d)=dot(LambdaUP[unpaired],GeminalBasis->d2y(iat),BasisSize);
130  dpsiU(iat, d) = simd::dot(LambdaUP[unpaired], GeminalBasis->dY[iat], BasisSize); //@@
131  d2psiU(iat, d) = simd::dot(LambdaUP[unpaired], GeminalBasis->d2Y[iat], BasisSize); //@@
132  }
133  GradType rv = simd::dot(psiM[iat], dpsiU[iat], Nup);
134  ValueType lap = simd::dot(psiM[iat], d2psiU[iat], Nup);
135  myG[iat] = rv;
136  myL[iat] = lap - dot(rv, rv);
137  }
138  for (int jat = Nup, d = 0; jat < NumPtcls; jat++, d++)
139  {
140  GradType rv;
141  ValueType lap = 0;
142  for (int u = 0; u < Nup; u++)
143  {
144  ValueType dfac = psiM(u, d);
145  //rv += dfac*(dpsiD(d,u)=dot(phiT[u],GeminalBasis->dy(jat),BasisSize));
146  //lap += dfac*(d2psiD(d,u)=dot(phiT[u],GeminalBasis->d2y(jat),BasisSize));
147  rv += dfac * (dpsiD(d, u) = simd::dot(phiT[u], GeminalBasis->dY[jat], BasisSize)); //@@
148  lap += dfac * (d2psiD(d, u) = simd::dot(phiT[u], GeminalBasis->d2Y[jat], BasisSize)); //@@
149  }
150  myG[jat] = rv;
151  myL[jat] = lap - dot(rv, rv);
152  }
153  dY = GeminalBasis->dY;
154  d2Y = GeminalBasis->d2Y;
155 }
156 
158 {
159  //add the data: determinant, inverse, gradient and laplacians
160  //buf.add(CurrentDet);
161  buf.add(log_value_);
162  buf.add(psiM.begin(), psiM.end());
163  buf.add(phiT.begin(), phiT.end());
164  buf.add(d2psiU.begin(), d2psiU.end());
165  buf.add(d2psiD.begin(), d2psiD.end());
168  buf.add(d2Y.begin(), d2Y.end());
172  //buf.add(myL.begin(), myL.end());
173 }
174 
176 {
178  P.G += myG;
179  P.L += myL;
180  //if(UseBuffer)
181  {
182  //buf.put(CurrentDet);
183  buf.put(log_value_);
184  buf.put(psiM.begin(), psiM.end());
185  buf.put(phiT.begin(), phiT.end());
186  buf.put(d2psiU.begin(), d2psiU.end());
187  buf.put(d2psiD.begin(), d2psiD.end());
190  buf.put(d2Y.begin(), d2Y.end());
194  //buf.put(myL.begin(), myL.end());
195  }
196  return log_value_;
197  //return CurrentDet;
198 }
199 
201 {
202  //if(UseBuffer)
203  {
204  //buf.get(CurrentDet);
205  buf.get(log_value_);
206  buf.get(psiM.begin(), psiM.end());
207  buf.get(phiT.begin(), phiT.end());
208  buf.get(d2psiU.begin(), d2psiU.end());
209  buf.get(d2psiD.begin(), d2psiD.end());
212  buf.get(d2Y.begin(), d2Y.end());
216  //buf.get(myL.begin(), myL.end());
217  //copy current inverse of the determinant
218  psiM_temp = psiM;
219  }
220 }
221 
222 
223 /** return the ratio only for the iat-th partcle move
224  * @param P current configuration
225  * @param iat the particle thas is being moved
226  */
228 {
230  //GeminalBasis->evaluate(P,iat);
231  GeminalBasis->evaluateForPtclMove(P, iat); //@@
232  //To dune with gemv
233  //BLAS::gemv(Lambda.rows(),Lambda.cols(), Lambda.data(), GeminalBasis->y(0), phiT[iat]);
234  //const ValueType* restrict y_ptr=GeminalBasis->y(0);
235  const BasisSetType::ValueType* restrict y_ptr = GeminalBasis->Phi.data(); //@@
236  if (iat < Nup)
237  {
238  for (int d = 0, jat = Nup; d < Ndown; d++, jat++)
239  psiU[d] = simd::dot(y_ptr, phiT[jat], BasisSize);
240  //psiU[d]=BLAS::dot(BasisSize,y_ptr,phiT[jat]);
241  //unpaired block Ndown x unpaired
242  for (int d = Ndown, unpaired = 0; d < Nup; d++, unpaired++)
243  //psiU[d] = BLAS::dot(BasisSize,LambdaUP[unpaired],y_ptr);
244  psiU[d] = simd::dot(LambdaUP[unpaired], y_ptr, BasisSize);
245  //curRatio=DetRatio(psiM, psiU.data(),iat);
246  curRatio = DetRatioByRow(psiM, psiU, iat);
247  }
248  else
249  {
250  for (int u = 0; u < Nup; u++)
251  //psiD[u]=BLAS::dot(BasisSize,y_ptr,phiT[u]);
252  psiD[u] = simd::dot(y_ptr, phiT[u], BasisSize);
253  //curRatio=DetRatioTranspose(psiM, psiD.data(),iat-Nup);
255  }
256  return curRatio;
257 }
258 
260 {
261  //const ValueType* restrict y_ptr=GeminalBasis->y(0);
262  const BasisSetType::ValueType* restrict y_ptr = GeminalBasis->Phi.data(); //@@
263  for (int d = 0, jat = Nup; d < Ndown; d++, jat++)
264  {
265  psiU[d] = simd::dot(y_ptr, phiT[jat], BasisSize);
266  //psiU[d]=BLAS::dot(BasisSize,y_ptr,phiT[jat]);
267  }
268  //unpaired block Ndown x unpaired
269  for (int d = Ndown, unpaired = 0; d < Nup; d++, unpaired++)
270  {
271  psiU[d] = simd::dot(LambdaUP[unpaired], y_ptr, BasisSize);
272  //psiU[d] = BLAS::dot(BasisSize,LambdaUP[unpaired],y_ptr);
273  }
274  //curRatio = DetRatio(psiM_temp, psiU.data(),iat);
276  InverseUpdateByRow(psiM_temp, psiU, workV1, workV2, iat, static_cast<ValueType>(curRatio));
277  std::copy(dpsiU[iat], dpsiU[iat] + Nup, dpsiUv.begin());
278  std::copy(d2psiU[iat], d2psiU[iat] + Nup, d2psiUv.begin());
279  //const GradType* restrict dy_ptr = GeminalBasis->dy(0);
280  //const ValueType* restrict d2y_ptr = GeminalBasis->d2y(0);
281  const BasisSetType::GradType* restrict dy_ptr = GeminalBasis->dPhi.data(); //@@
282  const BasisSetType::ValueType* restrict d2y_ptr = GeminalBasis->d2Phi.data(); //@@
283  for (int d = 0, jat = Nup; d < Ndown; d++, jat++)
284  {
285  dpsiU(iat, d) = simd::dot(phiT[jat], dy_ptr, BasisSize);
286  d2psiU(iat, d) = simd::dot(phiT[jat], d2y_ptr, BasisSize);
287  }
288  for (int d = Ndown, unpaired = 0; d < Nup; d++, unpaired++)
289  {
290  dpsiU(iat, d) = simd::dot(LambdaUP[unpaired], dy_ptr, BasisSize);
291  d2psiU(iat, d) = simd::dot(LambdaUP[unpaired], d2y_ptr, BasisSize);
292  }
293  for (int jat = Nup, d = 0; jat < NumPtcls; jat++, d++)
294  {
295  dpsiDv[d] = dpsiD(d, iat);
296  dpsiD(d, iat) = simd::dot(phiT[iat], dY[jat], BasisSize);
297  d2psiDv[d] = d2psiD(d, iat);
298  d2psiD(d, iat) = simd::dot(phiT[iat], d2Y[jat], BasisSize);
299  }
300 }
301 
303 {
304  //const ValueType* restrict y_ptr=GeminalBasis->y(0);
305  const BasisSetType::ValueType* restrict y_ptr = GeminalBasis->Phi.data(); //@@
306  int d = iat - Nup;
307  for (int u = 0; u < Nup; u++)
308  {
309  psiD[u] = simd::dot(y_ptr, phiT[u], BasisSize);
310  //psiD[u]=BLAS::dot(BasisSize,y_ptr,phiT[u]);
311  }
312  //curRatio = DetRatioTranspose(psiM_temp, psiD.data(),d);
314  InverseUpdateByColumn(psiM_temp, psiD, workV1, workV2, d, static_cast<ValueType>(curRatio));
315  std::copy(dpsiD[d], dpsiD[d] + Nup, dpsiDv.begin());
316  std::copy(d2psiD[d], d2psiD[d] + Nup, d2psiDv.begin());
317  //const GradType* restrict dy_ptr = GeminalBasis->dy(0);
318  //const ValueType* restrict d2y_ptr = GeminalBasis->d2y(0);
319  const BasisSetType::GradType* restrict dy_ptr = GeminalBasis->dPhi.data(); //@@
320  const BasisSetType::ValueType* restrict d2y_ptr = GeminalBasis->d2Phi.data(); //@@
321  for (int u = 0; u < Nup; u++)
322  {
323  dpsiD(d, u) = simd::dot(phiT[u], dy_ptr, BasisSize);
324  d2psiD(d, u) = simd::dot(phiT[u], d2y_ptr, BasisSize);
325  }
326  for (int kat = 0; kat < Nup; kat++)
327  {
328  dpsiUv[kat] = dpsiU(kat, d);
329  dpsiU(kat, d) = simd::dot(phiT[iat], dY[kat], BasisSize);
330  d2psiUv[kat] = d2psiU(kat, d);
331  d2psiU(kat, d) = simd::dot(phiT[iat], d2Y[kat], BasisSize);
332  }
333 }
334 
335 /** move was accepted, update the real container
336  */
337 void AGPDeterminant::acceptMove(ParticleSet& P, int iat, bool safe_to_delay)
338 {
340  //CurrentDet *= curRatio;
341  if (UpdateMode == ORB_PBYP_RATIO)
342  {
343  APP_ABORT("Incomplete AGPDeterminant::acceptMove Turn on useDrift ");
344  if (iat < Nup)
345  InverseUpdateByRow(psiM, psiU, workV1, workV2, iat, static_cast<ValueType>(curRatio));
346  else
347  InverseUpdateByColumn(psiM, psiD, workV1, workV2, iat - Nup, static_cast<ValueType>(curRatio));
348  psiM_temp = psiM;
349  //psiM = psiM_temp;
350  }
351  else
352  {
353  psiM = psiM_temp;
354  myG = myG_temp;
355  myL = myL_temp;
356  //std::copy(GeminalBasis->dy(0),GeminalBasis->dy(0)+BasisSize,dY[iat]);
357  //std::copy(GeminalBasis->d2y(0),GeminalBasis->d2y(0)+BasisSize,d2Y[iat]);
358  std::copy(GeminalBasis->dPhi.begin(), GeminalBasis->dPhi.end(), dY[iat]); //@@
359  std::copy(GeminalBasis->d2Phi.begin(), GeminalBasis->d2Phi.end(), d2Y[iat]); //@@
360  }
361  curRatio = 1.0;
362 }
363 
364 /** move was rejected. copy the real container to the temporary to move on
365  */
367 {
368  if (UpdateMode != ORB_PBYP_RATIO)
369  {
370  std::copy(phiTv.begin(), phiTv.end(), phiT[iat]);
371  psiM_temp = psiM;
372  if (iat < Nup)
373  {
374  std::copy(dpsiUv.begin(), dpsiUv.end(), dpsiU[iat]);
375  std::copy(d2psiUv.begin(), d2psiUv.end(), d2psiU[iat]);
376  for (int d = 0; d < Ndown; d++)
377  {
378  dpsiD(d, iat) = dpsiDv[d];
379  d2psiD(d, iat) = d2psiDv[d];
380  }
381  }
382  else
383  {
384  int d = iat - Nup;
385  std::copy(dpsiDv.begin(), dpsiDv.end(), dpsiD[d]);
386  std::copy(d2psiDv.begin(), d2psiDv.end(), d2psiD[d]);
387  for (int kat = 0; kat < Nup; kat++)
388  {
389  dpsiU(kat, d) = dpsiUv[kat];
390  d2psiU(kat, d) = d2psiUv[kat];
391  }
392  }
393  }
394  curRatio = 1.0;
395 }
396 
397 std::unique_ptr<WaveFunctionComponent> AGPDeterminant::makeClone(ParticleSet& tqp) const
398 {
399  auto myclone = std::make_unique<AGPDeterminant>(nullptr);
400  myclone->GeminalBasis = GeminalBasis->makeClone();
401  myclone->resize(Nup, Ndown);
402  myclone->Lambda = Lambda;
403  if (Nup != Ndown)
404  myclone->LambdaUP = LambdaUP;
405  return myclone;
406 }
407 } // namespace qmcplusplus
void resize(size_type n, Type_t val=Type_t())
Resize the container.
Definition: OhmmsVector.h:166
Vector< ValueType > workV2
void resize(int nup, int ndown)
reset the size: with the number of particles and number of orbtials
Container_t::iterator begin()
Definition: OhmmsMatrix.h:89
ValueMatrix phiT
Transient data for gradient and laplacian evaluation.
Fixed-size array.
Definition: OhmmsTinyMeta.h:30
virtual void evaluateForWalkerMove(const ParticleSet &P)=0
GradVector dPhi
dphi[i] the gradient of the i-th basis set
Definition: BasisSetBase.h:69
ValueVector Phi
phi[i] the value of the i-th basis set
Definition: BasisSetBase.h:67
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
ValueVector phiTv
value of single-particle orbital for particle-by-particle update
T dot(const T *restrict a, const T *restrict b, int n, TRES res=TRES())
dot product
void InverseUpdateByRow(Matrix< T, ALLOC > &Minv, Vector< T, ALLOC > &newrow, Vector< T, ALLOC > &rvec, Vector< T, ALLOC > &rvecinv, int rowchanged, T c_ratio)
update a inverse matrix by a row substitution
ValueMatrix d2Y
store laplacians
ParticleSet::SingleParticleValue * FirstAddressOfG
address of myG[0][0]
std::ostream & app_log()
Definition: OutputManager.h:65
ParticleSet::ParticleLaplacian myL
void copyFromBuffer(ParticleSet &P, WFBufferType &buf) override
For particle-by-particle move.
BasisSetType::ValueType * LastAddressOfdVD
address of FirstAddressOfdVD+OHMMS_DIM*Ndown*Nup
PsiValue curRatio
current ratio
ParticleSet::ParticleGradient myG
ParticleSet::ParticleGradient myG_temp
void resize(size_type n, size_type m)
Resize the container.
Definition: OhmmsMatrix.h:99
base class for a basis set
Definition: BasisSetBase.h:38
Attaches a unit to a Vector for IO.
std::complex< T > convertValueToLog(const std::complex< T > &logpsi)
evaluate log(psi) as log(|psi|) and phase
ParticleLaplacian L
laplacians of the particles
Definition: ParticleSet.h:85
MatA::value_type DetRatioByRow(const MatA &Minv, const VecB &newv, int rowchanged)
determinant ratio with a row substitution
std::complex< QTFull::RealType > LogValue
void copy(const Array< T1, 3 > &src, Array< T2, 3 > &dest)
Definition: Blitz.h:639
virtual BasisSetBase * makeClone() const =0
clone the basis set
Declaration of AGPDeterminant for pairing orbitals.
Specialized paritlce class for atomistic simulations.
Definition: ParticleSet.h:55
void ratioDown(ParticleSet &P, int iat)
BasisSetType::ValueType * FirstAddressOfdVD
address of dpsiD[0][0]
ValueMatrix d2psiU
temporary determinant-related matrix for laplacians
void product(const Matrix< T > &A, const Matrix< T > &B, Matrix< T > &C)
static function to perform C=AB for real matrices
Matrix< ValueType > psiM_temp
typename OrbitalSetTraits< T >::ValueType ValueType
Definition: BasisSetBase.h:45
BasisSetType::ValueType * LastAddressOfdY
address of FirstAddressOfdY+NumPtcls*BasisSize
void InvertWithLog(T *restrict x, int n, int m, T *restrict work, int *restrict pivot, std::complex< T1 > &logdet)
BasisSetType::ValueType * FirstAddressOfdY
address of dY[0][0]
ParticleGradient G
gradients of the particles
Definition: ParticleSet.h:83
MatA::value_type DetRatioByColumn(const MatA &Minv, const VecB &newv, int colchanged)
determinant ratio with a column substitution
ValueMatrix Lambda
coefficient of the up/down block
pointer last_address()
Definition: OhmmsVector.h:258
Vector< ValueType > psiD
BasisSetType::ValueType * FirstAddressOfdVU
address of dpsiU[0][0]
GradMatrix dpsiU
temporary determinant-related matrix for gradients
void acceptMove(ParticleSet &P, int iat, bool safe_to_delay=false) override
move was accepted, update the real container
void restore(int iat) override
move was rejected.
#define APP_ABORT(msg)
Widely used but deprecated fatal error macros from legacy code.
Definition: AppAbort.h:27
int Nup
number of major spins
int BasisSize
size of the basis set
GradMatrix dY
store gradients
std::unique_ptr< WaveFunctionComponent > makeClone(ParticleSet &tqp) const override
make clone
~AGPDeterminant() override
default destructor
IndexType getBasisSetSize() const
return the basis set size
Definition: BasisSetBase.h:111
Define determinant operators.
ParticleSet::SingleParticleValue * LastAddressOfG
address of FirstAddressOfG+OHMMS_DIM*NumPtcls
void ratioUp(ParticleSet &P, int iat)
Vector< ValueType > workV1
ValueMatrix LambdaUP
coefficient of the major block
Matrix< ValueType > psiM
psiM(j,i)
void evaluateLogAndStore(const ParticleSet &P)
Tensor< typename BinaryReturn< T1, T2, OpMultiply >::Type_t, D > dot(const AntiSymTensor< T1, D > &lhs, const AntiSymTensor< T2, D > &rhs)
LatticeGaussianProduct::ValueType ValueType
int Ndown
number of minor spins
ValueVector d2Phi
d2phi[i] the laplacian of the i-th basis set
Definition: BasisSetBase.h:71
void resize(int ntargets)
resize the container
Definition: BasisSetBase.h:88
int NumPtcls
Total number of particles.
PsiValue ratio(ParticleSet &P, int iat) override
return the ratio only for the iat-th partcle move
virtual void evaluateForPtclMove(const ParticleSet &P, int iat)=0
BasisSetType::ValueType * LastAddressOfdVU
address of FirstAddressOfdVU+OHMMS_DIM*Nup*Nup
Container_t::iterator end()
Definition: OhmmsMatrix.h:90
LogValue evaluateLog(const ParticleSet &P, ParticleSet::ParticleGradient &G, ParticleSet::ParticleLaplacian &L) override
Calculate the log value of the Dirac determinant for particles.
void registerData(ParticleSet &P, WFBufferType &buf) override
For particle-by-particle move.
AGPDeterminant(BasisSetType *bs=nullptr)
constructor
void put(std::complex< T1 > &x)
Definition: PooledMemory.h:165
ParticleSet::ParticleLaplacian myL_temp
LogValue updateBuffer(ParticleSet &P, WFBufferType &buf, bool fromscratch=false) override
For particle-by-particle move.
pointer first_address()
Definition: OhmmsVector.h:255
void InverseUpdateByColumn(Matrix< T, ALLOC > &Minv, Vector< T, ALLOC > &newcol, Vector< T, ALLOC > &rvec, Vector< T, ALLOC > &rvecinv, int colchanged, T c_ratio)
void add(std::complex< T1 > &x)
Definition: PooledMemory.h:113
void get(std::complex< T1 > &x)
Definition: PooledMemory.h:132