QMCPACK
BackflowTransformation Class Referencefinal
+ Inheritance diagram for BackflowTransformation:
+ Collaboration diagram for BackflowTransformation:

Public Types

enum  { DIM = OHMMS_DIM }
 
enum  {
  ORB_PBYP_RATIO, ORB_PBYP_ALL, ORB_PBYP_PARTIAL, ORB_WALKER,
  ORB_ALLWALKER
}
 enum for a update mode More...
 
using WFBufferType = BackflowFunctionBase::WFBufferType
 
using RealType = OHMMS_PRECISION
 
using IndexType = int
 
using PosType = TinyVector< RealType, DIM >
 
using GradType = TinyVector< RealType, DIM >
 
using HessType = Tensor< RealType, DIM >
 
using IndexVector = Vector< IndexType >
 
using GradVector = Vector< GradType >
 
using GradMatrix = Matrix< GradType >
 
using HessVector = Vector< HessType >
 
using HessMatrix = Matrix< HessType >
 
using HessArray = Array< HessType, 3 >
 
using PSetMap = std::map< std::string, const std::unique_ptr< ParticleSet > >
 

Public Member Functions

 BackflowTransformation (ParticleSet &els)
 
void copyFrom (const BackflowTransformation &tr, ParticleSet &targetPtcl)
 
std::unique_ptr< BackflowTransformationmakeClone (ParticleSet &tqp) const
 
 ~BackflowTransformation ()
 
bool put (xmlNodePtr cur)
 
void acceptMove (const ParticleSet &P, int iat)
 
void restore (int iat=0)
 
bool isOptimizable () const
 
void checkInVariables (opt_variables_type &active)
 
void checkOutVariables (const opt_variables_type &active)
 
void resetParameters (const opt_variables_type &active)
 
void reportStatus (std::ostream &os) final
 print the state, e.g., optimizables More...
 
void checkInVariablesExclusive (opt_variables_type &active) final
 check in variational parameters to the global list of parameters used by the optimizer. More...
 
void resetParametersExclusive (const opt_variables_type &active) final
 reset the parameters during optimizations. More...
 
void registerData (ParticleSet &P, WFBufferType &buf)
 
void updateBuffer (ParticleSet &P, WFBufferType &buf, bool redo)
 
void copyFromBuffer (ParticleSet &P, WFBufferType &buf)
 
void transformOnly (const ParticleSet &P)
 calculate quasi-particle coordinates only More...
 
void evaluatePbyP (const ParticleSet &P, int iat)
 calculate new quasi-particle coordinates after pbyp move More...
 
void evaluatePbyPWithGrad (const ParticleSet &P, int iat)
 calculate new quasi-particle coordinates after pbyp move More...
 
void evaluatePbyPAll (const ParticleSet &P, int iat)
 calculate new quasi-particle coordinates after pbyp move More...
 
void evaluateBmatOnly (const ParticleSet &P, int iat)
 calculate only Bmat. More...
 
void evaluate (const ParticleSet &P)
 calculate quasi-particle coordinates, Bmat and Amat More...
 
void evaluate (const ParticleSet &P, ParticleSet &Pnew)
 calculate quasi-particle coordinates and store in Pnew More...
 
void evaluateDerivatives (const ParticleSet &P)
 
void testDeriv (const ParticleSet &P)
 
void testPbyP (ParticleSet &P)
 
- Public Member Functions inherited from OptimizableObject
 OptimizableObject (const std::string &name)
 
const std::string & getName () const
 
bool isOptimized () const
 
void setOptimization (bool state)
 
virtual void writeVariationalParameters (hdf_archive &hout)
 Write the variational parameters for this object to the VP HDF file. More...
 
virtual void readVariationalParameters (hdf_archive &hin)
 Read the variational parameters for this object from the VP HDF file. More...
 

Public Attributes

int NumTargets
 number of quantum particles More...
 
int activeParticle
 active particle in pbyp moves More...
 
ParticleSet QP
 quasiparticle coordinates More...
 
int numParams
 
int UpdateMode
 current update mode More...
 
std::map< int, int > optIndexMap
 
RealType cutOff
 
int numVarBefore
 
const int myTableIndex_
 Distance Table. More...
 
GradVector Bmat
 
GradMatrix Bmat_full
 
GradMatrix Bmat_temp
 
HessMatrix Amat
 
HessMatrix Amat_temp
 
HessArray Xmat
 
GradMatrix Ymat
 
GradMatrix Cmat
 
RealTypeFirstOfP
 
RealTypeLastOfP
 
RealTypeFirstOfA
 
RealTypeLastOfA
 
RealTypeFirstOfB
 
RealTypeLastOfB
 
RealTypeFirstOfA_temp
 
RealTypeLastOfA_temp
 
RealTypeFirstOfB_temp
 
RealTypeLastOfB_temp
 
HessType HESS_ID
 
HessType DummyHess
 
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns
 
std::map< std::string, int > sources
 
std::vector< std::string > names
 
ParticleSet::ParticlePos newQP
 new qp coordinates for pbyp moves. More...
 
ParticleSet::ParticlePos oldQP
 
Vector< PosTypestoreQP
 
std::vector< int > indexQP
 store index of qp coordinates that changed during pbyp move More...
 
std::vector< int > index
 
opt_variables_type myVars
 

Detailed Description

Definition at line 31 of file BackflowTransformation.h.

Member Typedef Documentation

◆ GradMatrix

Definition at line 48 of file BackflowTransformation.h.

◆ GradType

Definition at line 44 of file BackflowTransformation.h.

◆ GradVector

Definition at line 47 of file BackflowTransformation.h.

◆ HessArray

using HessArray = Array<HessType, 3>

Definition at line 52 of file BackflowTransformation.h.

◆ HessMatrix

Definition at line 50 of file BackflowTransformation.h.

◆ HessType

Definition at line 45 of file BackflowTransformation.h.

◆ HessVector

Definition at line 49 of file BackflowTransformation.h.

◆ IndexType

using IndexType = int

Definition at line 42 of file BackflowTransformation.h.

◆ IndexVector

Definition at line 46 of file BackflowTransformation.h.

◆ PosType

Definition at line 43 of file BackflowTransformation.h.

◆ PSetMap

using PSetMap = std::map<std::string, const std::unique_ptr<ParticleSet> >

Definition at line 54 of file BackflowTransformation.h.

◆ RealType

Definition at line 41 of file BackflowTransformation.h.

◆ WFBufferType

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
DIM 

Definition at line 37 of file BackflowTransformation.h.

38  {
39  DIM = OHMMS_DIM
40  };
#define OHMMS_DIM
Definition: config.h:64

◆ anonymous enum

anonymous enum

enum for a update mode

Enumerator
ORB_PBYP_RATIO 

particle-by-particle ratio only

ORB_PBYP_ALL 

particle-by-particle, update Value-Gradient-Laplacian

ORB_PBYP_PARTIAL 

particle-by-particle, update Value and Grdient

ORB_WALKER 

walker update

ORB_ALLWALKER 

all walkers update

Definition at line 74 of file BackflowTransformation.h.

75  {
76  ORB_PBYP_RATIO, /*!< particle-by-particle ratio only */
77  ORB_PBYP_ALL, /*!< particle-by-particle, update Value-Gradient-Laplacian */
78  ORB_PBYP_PARTIAL, /*!< particle-by-particle, update Value and Grdient */
79  ORB_WALKER, /*!< walker update */
80  ORB_ALLWALKER /*!< all walkers update */
81  };

Constructor & Destructor Documentation

◆ BackflowTransformation()

Definition at line 23 of file BackflowTransformation.cpp.

References BackflowTransformation::Amat, BackflowTransformation::Bmat, BackflowTransformation::Bmat_full, Tensor< T, D >::diagonal(), BackflowTransformation::DummyHess, ParticleSet::getTotalNum(), BackflowTransformation::HESS_ID, BackflowTransformation::indexQP, BackflowTransformation::newQP, BackflowTransformation::NumTargets, BackflowTransformation::numVarBefore, BackflowTransformation::oldQP, Matrix< T, Alloc >::resize(), and Vector< T, Alloc >::resize().

24  : OptimizableObject("bf"), QP(els), cutOff(0.0), myTableIndex_(els.addTable(els))
25 {
26  NumTargets = els.getTotalNum();
32  indexQP.resize(NumTargets);
33  HESS_ID.diagonal(1.0);
34  DummyHess = 0.0;
35  numVarBefore = 0;
36 }
void resize(size_type n, Type_t val=Type_t())
Resize the container.
Definition: OhmmsVector.h:166
ParticleSet::ParticlePos newQP
new qp coordinates for pbyp moves.
void resize(size_type n, size_type m)
Resize the container.
Definition: OhmmsMatrix.h:99
OptimizableObject(const std::string &name)
void diagonal(const T &rhs)
Definition: Tensor.h:205
int NumTargets
number of quantum particles
ParticleSet QP
quasiparticle coordinates
std::vector< int > indexQP
store index of qp coordinates that changed during pbyp move

◆ ~BackflowTransformation()

~BackflowTransformation ( )
default

Member Function Documentation

◆ acceptMove()

void acceptMove ( const ParticleSet P,
int  iat 
)

Definition at line 65 of file BackflowTransformation.cpp.

References BackflowTransformation::bfFuns, copy(), BackflowTransformation::FirstOfA, BackflowTransformation::FirstOfA_temp, BackflowTransformation::FirstOfB, BackflowTransformation::FirstOfB_temp, BackflowTransformation::indexQP, BackflowTransformation::LastOfA_temp, BackflowTransformation::LastOfB_temp, BackflowTransformation::newQP, BackflowTransformation::NumTargets, BackflowTransformation::ORB_PBYP_ALL, BackflowTransformation::ORB_PBYP_PARTIAL, BackflowTransformation::ORB_PBYP_RATIO, BackflowTransformation::QP, ParticleSet::R, ParticleSet::update(), and BackflowTransformation::UpdateMode.

Referenced by BackflowTransformation::testPbyP().

66 {
67  // update QP table
68  // may be faster if I do this one qp at a time, for now do full update
69  for (int i = 0; i < NumTargets; i++)
70  QP.R[i] = newQP[i];
71  QP.update(0);
72  indexQP.clear();
73  switch (UpdateMode)
74  {
75  case ORB_PBYP_RATIO:
76  break;
77  case ORB_PBYP_PARTIAL:
79  break;
80  case ORB_PBYP_ALL:
83  break;
84  default:
87  break;
88  }
89  for (int i = 0; i < bfFuns.size(); i++)
90  bfFuns[i]->acceptMove(iat, UpdateMode);
91 }
ParticleSet::ParticlePos newQP
new qp coordinates for pbyp moves.
void update(bool skipSK=false)
update the internal data
void copy(const Array< T1, 3 > &src, Array< T2, 3 > &dest)
Definition: Blitz.h:639
ParticlePos R
Position.
Definition: ParticleSet.h:79
int NumTargets
number of quantum particles
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns
void acceptMove(const ParticleSet &P, int iat)
ParticleSet QP
quasiparticle coordinates
std::vector< int > indexQP
store index of qp coordinates that changed during pbyp move

◆ checkInVariables()

void checkInVariables ( opt_variables_type active)

Definition at line 100 of file BackflowTransformation.cpp.

References BackflowTransformation::bfFuns.

Referenced by BackflowTransformation::checkInVariablesExclusive(), BackflowTransformation::testDeriv(), DiracDeterminantWithBackflow::testDerivFjj(), and DiracDeterminantWithBackflow::testDerivLi().

101 {
102  for (int i = 0; i < bfFuns.size(); i++)
103  bfFuns[i]->checkInVariables(active);
104 }
void checkInVariables(opt_variables_type &active)
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns

◆ checkInVariablesExclusive()

void checkInVariablesExclusive ( opt_variables_type active)
inlinefinalvirtual

check in variational parameters to the global list of parameters used by the optimizer.

Parameters
activea super set of optimizable variables

The existing checkInVariables implementation in WFC/SPO/.. are inclusive and it calls checkInVariables of its members class A: public SPOSet {} class B: public WFC { A objA; checkInVariables() { objA.checkInVariables(); } };

With OptimizableObject, class A: public OptimizableObject {} class B: public OptimizableObject { A objA; checkInVariablesExclusive() { // should not call objA.checkInVariablesExclusive() if objA has been extracted; } }; A vector of OptimizableObject, will be created by calling extractOptimizableObjects(). All the checkInVariablesExclusive() will be called through this vector and thus checkInVariablesExclusive implementation should only handle non-OptimizableObject members.

Implements OptimizableObject.

Definition at line 168 of file BackflowTransformation.h.

References BackflowTransformation::checkInVariables().

168 { checkInVariables(active); }
void checkInVariables(opt_variables_type &active)

◆ checkOutVariables()

void checkOutVariables ( const opt_variables_type active)

Definition at line 112 of file BackflowTransformation.cpp.

References BackflowTransformation::bfFuns.

Referenced by BackflowTransformation::testDeriv(), DiracDeterminantWithBackflow::testDerivFjj(), and DiracDeterminantWithBackflow::testDerivLi().

113 {
114  for (int i = 0; i < bfFuns.size(); i++)
115  bfFuns[i]->checkOutVariables(active);
116 }
void checkOutVariables(const opt_variables_type &active)
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns

◆ copyFrom()

void copyFrom ( const BackflowTransformation tr,
ParticleSet targetPtcl 
)

Definition at line 38 of file BackflowTransformation.cpp.

References BackflowTransformation::bfFuns, BackflowTransformation::cutOff, BackflowTransformation::numParams, BackflowTransformation::numVarBefore, and BackflowTransformation::optIndexMap.

39 {
40  cutOff = tr.cutOff;
41  numParams = tr.numParams;
42  numVarBefore = tr.numVarBefore;
43  optIndexMap = tr.optIndexMap;
44  bfFuns.resize(tr.bfFuns.size());
45  auto it(tr.bfFuns.begin());
46  for (int i = 0; i < (tr.bfFuns).size(); i++, it++)
47  bfFuns[i] = (*it)->makeClone(targetPtcl);
48 }
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns

◆ copyFromBuffer()

void copyFromBuffer ( ParticleSet P,
WFBufferType buf 
)

Definition at line 175 of file BackflowTransformation.cpp.

References BackflowTransformation::bfFuns, BackflowTransformation::FirstOfA, BackflowTransformation::FirstOfB, BackflowTransformation::FirstOfP, PooledMemory< T_scalar, Alloc >::get(), BackflowTransformation::LastOfA, BackflowTransformation::LastOfB, BackflowTransformation::LastOfP, BackflowTransformation::NumTargets, BackflowTransformation::QP, ParticleSet::R, BackflowTransformation::storeQP, and ParticleSet::update().

176 {
177  buf.get(FirstOfP, LastOfP);
178  buf.get(FirstOfA, LastOfA);
179  buf.get(FirstOfB, LastOfB);
180  for (int i = 0; i < NumTargets; i++)
181  QP.R[i] = storeQP[i];
182  QP.update(0);
183  for (int i = 0; i < bfFuns.size(); i++)
184  bfFuns[i]->copyFromBuffer(buf);
185 }
void update(bool skipSK=false)
update the internal data
ParticlePos R
Position.
Definition: ParticleSet.h:79
int NumTargets
number of quantum particles
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns
void copyFromBuffer(ParticleSet &P, WFBufferType &buf)
ParticleSet QP
quasiparticle coordinates

◆ evaluate() [1/2]

void evaluate ( const ParticleSet P)

calculate quasi-particle coordinates, Bmat and Amat

Definition at line 312 of file BackflowTransformation.cpp.

References BackflowTransformation::Amat, BackflowTransformation::bfFuns, BackflowTransformation::Bmat, BackflowTransformation::Bmat_full, BackflowTransformation::NumTargets, BackflowTransformation::QP, ParticleSet::R, and ParticleSet::update().

Referenced by BackflowTransformation::evaluate(), BackflowTransformation::registerData(), BackflowTransformation::testDeriv(), DiracDeterminantWithBackflow::testDerivLi(), DiracDeterminantWithBackflow::testL(), BackflowTransformation::testPbyP(), BackflowTransformation::transformOnly(), and BackflowTransformation::updateBuffer().

313 {
314  Bmat = 0.0;
315  Amat = 0.0;
316  Bmat_full = 0.0;
317  QP.R = P.R;
318  for (int i = 0; i < NumTargets; i++)
319  {
320  //QP.R[i] = P.R[i];
321  Amat(i, i).diagonal(1.0);
322  }
323  for (int i = 0; i < bfFuns.size(); i++)
324  bfFuns[i]->evaluate(P, QP, Bmat_full, Amat);
325  // std::cerr <<"P.R \n";
326  // std::cerr <<P.R[0] << std::endl;
327  // std::cerr <<"QP.R " << std::endl;
328  // std::cerr <<QP.R[0] << std::endl;
329  // std::cerr <<omp_get_thread_num()<<" "<<P.R[0]-QP.R[0] << std::endl;
330  // APP_ABORT("TESTING BF \n");
331  /*Bmat=0.0;
332  Amat=0.0;
333  Bmat_full=0.0;
334  for(int i=0; i<NumTargets; i++) {
335  Amat(i,i).diagonal(1.0);
336  }*/
337  /*
338  // testing bf
339  for(int i=0; i<NumTargets; i++) {
340  std::cout <<"i: " <<i << std::endl;
341  std::cout <<P.R[i] << std::endl;
342  std::cout <<QP.R[i] << std::endl;
343  std::cout <<P.R[i]-QP.R[i] << std::endl;
344  }
345  //
346  */
347  QP.update(0); // update distance tables
348 }
void update(bool skipSK=false)
update the internal data
ParticlePos R
Position.
Definition: ParticleSet.h:79
int NumTargets
number of quantum particles
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns
void evaluate(const ParticleSet &P)
calculate quasi-particle coordinates, Bmat and Amat
ParticleSet QP
quasiparticle coordinates

◆ evaluate() [2/2]

void evaluate ( const ParticleSet P,
ParticleSet Pnew 
)

calculate quasi-particle coordinates and store in Pnew

Definition at line 352 of file BackflowTransformation.cpp.

References BackflowTransformation::bfFuns, BackflowTransformation::evaluate(), ParticleSet::R, and ParticleSet::update().

353 {
354  Pnew.R = P.R;
355  for (int i = 0; i < bfFuns.size(); i++)
356  bfFuns[i]->evaluate(P, Pnew);
357  Pnew.update(0);
358 }
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns
void evaluate(const ParticleSet &P)
calculate quasi-particle coordinates, Bmat and Amat

◆ evaluateBmatOnly()

void evaluateBmatOnly ( const ParticleSet P,
int  iat 
)

calculate only Bmat.

Assume that QP and Amat are current This is used in pbyp moves, in updateBuffer()

Definition at line 303 of file BackflowTransformation.cpp.

References BackflowTransformation::bfFuns, and BackflowTransformation::Bmat_full.

304 {
305  Bmat_full = 0.0;
306  for (int i = 0; i < bfFuns.size(); i++)
308 }
void evaluateBmatOnly(const ParticleSet &P, int iat)
calculate only Bmat.
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns

◆ evaluateDerivatives()

void evaluateDerivatives ( const ParticleSet P)

Definition at line 360 of file BackflowTransformation.cpp.

References BackflowTransformation::Amat, BackflowTransformation::bfFuns, BackflowTransformation::Bmat, BackflowTransformation::Bmat_full, BackflowTransformation::Cmat, Array< T, D, ALLOC >::data(), OMPstd::fill_n(), BackflowTransformation::numParams, BackflowTransformation::NumTargets, BackflowTransformation::numVarBefore, BackflowTransformation::optIndexMap, BackflowTransformation::QP, ParticleSet::R, Array< T, D, ALLOC >::resize(), Matrix< T, Alloc >::resize(), Array< T, D, ALLOC >::size(), Matrix< T, Alloc >::size(), ParticleSet::update(), BackflowTransformation::Xmat, and BackflowTransformation::Ymat.

Referenced by DiracDeterminantWithBackflow::testDerivFjj(), and DiracDeterminantWithBackflow::testDerivLi().

361 {
362  if (Cmat.size() == 0)
363  // initialize in the first call
364  {
365  // assumes that all BF parameters are packed together in
366  // active variable set. is this always correct???
367  numParams = 0;
368  for (int i = 0; i < bfFuns.size(); i++)
369  {
370  int tmp = bfFuns[i]->setParamIndex(numParams);
371  numParams += tmp;
372  }
373  numVarBefore = bfFuns[0]->indexOffset();
374  //app_log() <<"numVarBefore: " <<numVarBefore << std::endl;
375  for (int i = 0; i < numParams; i++)
376  {
377  optIndexMap[i] = i + numVarBefore;
378  //app_log() <<"prm, map: " <<i <<" " <<optIndexMap[i] << std::endl;
379  }
383  }
384  // Uncomment to test calculation of Cmat,Xmat,Ymat
385  //testDeriv(P);
386  Bmat = 0.0;
387  Amat = 0.0;
388  Bmat_full = 0.0;
389  Cmat = 0.0;
390  Ymat = 0.0;
391  std::fill_n(Xmat.data(), Xmat.size(), 0);
392  for (int i = 0; i < NumTargets; i++)
393  {
394  QP.R[i] = P.R[i];
395  Amat(i, i).diagonal(1.0);
396  }
397  for (int i = 0; i < bfFuns.size(); i++)
398  bfFuns[i]->evaluateWithDerivatives(P, QP, Bmat_full, Amat, Cmat, Ymat, Xmat);
399  QP.update(0);
400 }
void fill_n(T *x, size_t count, const T &value)
Definition: OMPstd.hpp:21
Type_t * data()
Definition: OhmmsArray.h:87
void resize(size_type n, size_type m)
Resize the container.
Definition: OhmmsMatrix.h:99
void update(bool skipSK=false)
update the internal data
void resize(const std::array< SIZET, D > &dims)
Resize the container.
Definition: OhmmsArray.h:65
size_type size() const
Definition: OhmmsMatrix.h:76
size_t size() const
Definition: OhmmsArray.h:57
ParticlePos R
Position.
Definition: ParticleSet.h:79
int NumTargets
number of quantum particles
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns
ParticleSet QP
quasiparticle coordinates

◆ evaluatePbyP()

void evaluatePbyP ( const ParticleSet P,
int  iat 
)

calculate new quasi-particle coordinates after pbyp move

Definition at line 200 of file BackflowTransformation.cpp.

References BackflowTransformation::activeParticle, BackflowTransformation::bfFuns, qmcplusplus::dot(), qmcplusplus::Units::charge::e, ParticleSet::getDistTableAA(), BackflowTransformation::indexQP, BackflowTransformation::myTableIndex_, BackflowTransformation::newQP, BackflowTransformation::NumTargets, BackflowTransformation::oldQP, BackflowTransformation::ORB_PBYP_RATIO, BackflowTransformation::QP, ParticleSet::R, BackflowTransformation::restore(), qmcplusplus::sqrt(), and BackflowTransformation::UpdateMode.

Referenced by BackflowTransformation::evaluatePbyPAll(), and BackflowTransformation::evaluatePbyPWithGrad().

202 {
204  // there should be no need for this, but there is (missing calls in QMCHam...)
205  for (int i = 0; i < bfFuns.size(); i++)
206  bfFuns[i]->restore(iat, UpdateMode);
207  activeParticle = iat;
208  for (int i = 0; i < NumTargets; i++)
209  oldQP[i] = newQP[i] = QP.R[i];
210  const auto& myTable = P.getDistTableAA(myTableIndex_);
211  newQP[iat] -= myTable.getTempDispls()[iat];
212  indexQP.clear();
213  for (int i = 0; i < bfFuns.size(); i++)
214  bfFuns[i]->evaluatePbyP(P, iat, newQP);
215  for (int jat = 0; jat < NumTargets; jat++)
216  {
217  // make direct routine in OhmmsPETE later
218  RealType dr = std::sqrt(dot(newQP[jat] - QP.R[jat], newQP[jat] - QP.R[jat]));
219  if (dr > 1e-10)
220  indexQP.push_back(jat);
221  }
222  //debug
223  /*
224  dummyQP2.R = P.R;
225  dummyQP2.update();
226  evaluate(P,dummyQP);
227  std::cout <<"index: ";
228  for(int i=0; i<indexQP.size(); i++) std::cout <<indexQP[i] <<" ";
229  std::cout << std::endl;
230  for(int jat=0; jat<NumTargets; jat++)
231  std::cout <<jat <<" "
232  <<(newQP[jat]-dummyQP.R[jat]) <<" " <<newQP[jat] <<" " <<QP.R[jat] <<"\n";
233  for(int i=0; i<NumTargets; i++) newQP[i] = dummyQP.R[i];
234  * /
235  indexQP.clear();
236  indexQP.push_back(iat); // set in the beginning by default
237  for(int jat=0; jat<NumTargets; jat++) {
238  if(jat!=iat) // && myTable.Temp[jat].r1 < cutOff )
239  indexQP.push_back(jat);
240  }
241  */
242 }
void evaluatePbyP(const ParticleSet &P, int iat)
calculate new quasi-particle coordinates after pbyp move
ParticleSet::ParticlePos newQP
new qp coordinates for pbyp moves.
ParticlePos R
Position.
Definition: ParticleSet.h:79
MakeReturn< UnaryNode< FnSqrt, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sqrt(const Vector< T1, C1 > &l)
QMCTraits::RealType RealType
int NumTargets
number of quantum particles
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns
Tensor< typename BinaryReturn< T1, T2, OpMultiply >::Type_t, D > dot(const AntiSymTensor< T1, D > &lhs, const AntiSymTensor< T2, D > &rhs)
int activeParticle
active particle in pbyp moves
ParticleSet QP
quasiparticle coordinates
std::vector< int > indexQP
store index of qp coordinates that changed during pbyp move

◆ evaluatePbyPAll()

void evaluatePbyPAll ( const ParticleSet P,
int  iat 
)

calculate new quasi-particle coordinates after pbyp move

Definition at line 271 of file BackflowTransformation.cpp.

References BackflowTransformation::activeParticle, BackflowTransformation::Amat_temp, BackflowTransformation::bfFuns, BackflowTransformation::Bmat_temp, copy(), qmcplusplus::dot(), qmcplusplus::Units::charge::e, BackflowTransformation::evaluatePbyP(), BackflowTransformation::FirstOfA, BackflowTransformation::FirstOfA_temp, BackflowTransformation::FirstOfB, BackflowTransformation::FirstOfB_temp, ParticleSet::getDistTableAA(), BackflowTransformation::indexQP, BackflowTransformation::LastOfA, BackflowTransformation::LastOfB, BackflowTransformation::myTableIndex_, BackflowTransformation::newQP, BackflowTransformation::NumTargets, BackflowTransformation::oldQP, BackflowTransformation::ORB_PBYP_ALL, BackflowTransformation::QP, ParticleSet::R, BackflowTransformation::restore(), qmcplusplus::sqrt(), and BackflowTransformation::UpdateMode.

272 {
274  // there should be no need for this, but there is (missing calls in QMCHam...)
275  for (int i = 0; i < bfFuns.size(); i++)
276  bfFuns[i]->restore(iat, UpdateMode);
277  activeParticle = iat;
278  for (int i = 0; i < NumTargets; i++)
279  oldQP[i] = newQP[i] = QP.R[i];
280  const auto& myTable = P.getDistTableAA(myTableIndex_);
281 
282  // this is from AoS, is it needed or not?
283  //newQP[iat] += myTable.Temp[iat].dr1;
284 
285  indexQP.clear();
288  for (int i = 0; i < bfFuns.size(); i++)
290  for (int jat = 0; jat < NumTargets; jat++)
291  {
292  // make direct routine in OhmmsPETE later
293  RealType dr = std::sqrt(dot(newQP[jat] - QP.R[jat], newQP[jat] - QP.R[jat]));
294  if (dr > 1e-10)
295  indexQP.push_back(jat);
296  }
297 }
void evaluatePbyP(const ParticleSet &P, int iat)
calculate new quasi-particle coordinates after pbyp move
ParticleSet::ParticlePos newQP
new qp coordinates for pbyp moves.
void copy(const Array< T1, 3 > &src, Array< T2, 3 > &dest)
Definition: Blitz.h:639
ParticlePos R
Position.
Definition: ParticleSet.h:79
MakeReturn< UnaryNode< FnSqrt, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sqrt(const Vector< T1, C1 > &l)
QMCTraits::RealType RealType
int NumTargets
number of quantum particles
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns
Tensor< typename BinaryReturn< T1, T2, OpMultiply >::Type_t, D > dot(const AntiSymTensor< T1, D > &lhs, const AntiSymTensor< T2, D > &rhs)
int activeParticle
active particle in pbyp moves
ParticleSet QP
quasiparticle coordinates
std::vector< int > indexQP
store index of qp coordinates that changed during pbyp move

◆ evaluatePbyPWithGrad()

void evaluatePbyPWithGrad ( const ParticleSet P,
int  iat 
)

calculate new quasi-particle coordinates after pbyp move

Definition at line 246 of file BackflowTransformation.cpp.

References BackflowTransformation::activeParticle, BackflowTransformation::Amat_temp, BackflowTransformation::bfFuns, copy(), qmcplusplus::dot(), qmcplusplus::Units::charge::e, BackflowTransformation::evaluatePbyP(), BackflowTransformation::FirstOfA, BackflowTransformation::FirstOfA_temp, ParticleSet::getDistTableAA(), BackflowTransformation::indexQP, BackflowTransformation::LastOfA, BackflowTransformation::myTableIndex_, BackflowTransformation::newQP, BackflowTransformation::NumTargets, BackflowTransformation::oldQP, BackflowTransformation::ORB_PBYP_PARTIAL, BackflowTransformation::QP, ParticleSet::R, BackflowTransformation::restore(), qmcplusplus::sqrt(), and BackflowTransformation::UpdateMode.

Referenced by BackflowTransformation::testPbyP().

247 {
249  // there should be no need for this, but there is (missing calls in QMCHam...)
250  for (int i = 0; i < bfFuns.size(); i++)
251  bfFuns[i]->restore(iat, UpdateMode);
252  activeParticle = iat;
253  for (int i = 0; i < NumTargets; i++)
254  oldQP[i] = newQP[i] = QP.R[i];
255  const auto& myTable = P.getDistTableAA(myTableIndex_);
256  newQP[iat] -= myTable.getTempDispls()[iat];
257  indexQP.clear();
259  for (int i = 0; i < bfFuns.size(); i++)
260  bfFuns[i]->evaluatePbyP(P, iat, newQP, Amat_temp);
261  for (int jat = 0; jat < NumTargets; jat++)
262  {
263  RealType dr = std::sqrt(dot(newQP[jat] - QP.R[jat], newQP[jat] - QP.R[jat]));
264  if (dr > 1e-10)
265  indexQP.push_back(jat);
266  }
267 }
void evaluatePbyP(const ParticleSet &P, int iat)
calculate new quasi-particle coordinates after pbyp move
ParticleSet::ParticlePos newQP
new qp coordinates for pbyp moves.
void copy(const Array< T1, 3 > &src, Array< T2, 3 > &dest)
Definition: Blitz.h:639
ParticlePos R
Position.
Definition: ParticleSet.h:79
MakeReturn< UnaryNode< FnSqrt, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sqrt(const Vector< T1, C1 > &l)
QMCTraits::RealType RealType
int NumTargets
number of quantum particles
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns
Tensor< typename BinaryReturn< T1, T2, OpMultiply >::Type_t, D > dot(const AntiSymTensor< T1, D > &lhs, const AntiSymTensor< T2, D > &rhs)
int activeParticle
active particle in pbyp moves
ParticleSet QP
quasiparticle coordinates
std::vector< int > indexQP
store index of qp coordinates that changed during pbyp move

◆ isOptimizable()

bool isOptimizable ( ) const

Definition at line 118 of file BackflowTransformation.cpp.

References BackflowTransformation::bfFuns.

Referenced by BackflowTransformation::resetParameters().

119 {
120  for (int i = 0; i < bfFuns.size(); i++)
121  if (bfFuns[i]->isOptimizable())
122  return true;
123  return false;
124 }
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns

◆ makeClone()

std::unique_ptr< BackflowTransformation > makeClone ( ParticleSet tqp) const

Definition at line 51 of file BackflowTransformation.cpp.

References qmcplusplus::clone.

52 {
53  auto clone = std::make_unique<BackflowTransformation>(tqp);
54  clone->copyFrom(*this, tqp);
55  // std::vector<BackflowFunctionBase*>::iterator it((bfFuns).begin());
56  // for(int i=0; i<(bfFuns).size() ; i++,it++)
57  // {
58  // clone->bfFuns[i]->reportStatus(cerr);
59  // }
60  return clone;
61 }

◆ put()

bool put ( xmlNodePtr  cur)
inline

Definition at line 153 of file BackflowTransformation.h.

153 { return true; }

◆ registerData()

void registerData ( ParticleSet P,
WFBufferType buf 
)

Definition at line 134 of file BackflowTransformation.cpp.

References PooledMemory< T_scalar, Alloc >::add(), BackflowTransformation::Amat, BackflowTransformation::Amat_temp, BackflowTransformation::bfFuns, BackflowTransformation::Bmat_full, BackflowTransformation::Bmat_temp, BackflowTransformation::evaluate(), BackflowTransformation::FirstOfA, BackflowTransformation::FirstOfA_temp, BackflowTransformation::FirstOfB, BackflowTransformation::FirstOfB_temp, BackflowTransformation::FirstOfP, BackflowTransformation::LastOfA, BackflowTransformation::LastOfA_temp, BackflowTransformation::LastOfB, BackflowTransformation::LastOfB_temp, BackflowTransformation::LastOfP, BackflowTransformation::NumTargets, OHMMS_DIM, BackflowTransformation::QP, ParticleSet::R, Matrix< T, Alloc >::resize(), and BackflowTransformation::storeQP.

Referenced by BackflowTransformation::testPbyP().

135 {
136  if (storeQP.size() == 0)
137  {
140  storeQP.resize(NumTargets);
141  }
142  evaluate(P);
143  FirstOfP = &(storeQP[0][0]);
145  FirstOfA = &(Amat(0, 0)[0]);
147  FirstOfB = &(Bmat_full(0, 0)[0]);
149  FirstOfA_temp = &(Amat_temp(0, 0)[0]);
151  FirstOfB_temp = &(Bmat_temp(0, 0)[0]);
153  for (int i = 0; i < NumTargets; i++)
154  storeQP[i] = QP.R[i];
155  buf.add(FirstOfP, LastOfP);
156  buf.add(FirstOfA, LastOfA);
157  buf.add(FirstOfB, LastOfB);
158  for (int i = 0; i < bfFuns.size(); i++)
159  bfFuns[i]->registerData(buf);
160 }
void resize(size_type n, size_type m)
Resize the container.
Definition: OhmmsMatrix.h:99
void registerData(ParticleSet &P, WFBufferType &buf)
#define OHMMS_DIM
Definition: config.h:64
ParticlePos R
Position.
Definition: ParticleSet.h:79
int NumTargets
number of quantum particles
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns
void evaluate(const ParticleSet &P)
calculate quasi-particle coordinates, Bmat and Amat
ParticleSet QP
quasiparticle coordinates

◆ reportStatus()

void reportStatus ( std::ostream &  os)
finalvirtual

print the state, e.g., optimizables

Reimplemented from OptimizableObject.

Definition at line 106 of file BackflowTransformation.cpp.

References BackflowTransformation::bfFuns.

107 {
108  for (int i = 0; i < bfFuns.size(); i++)
109  bfFuns[i]->reportStatus(os);
110 }
void reportStatus(std::ostream &os) final
print the state, e.g., optimizables
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns

◆ resetParameters()

void resetParameters ( const opt_variables_type active)

Definition at line 126 of file BackflowTransformation.cpp.

References BackflowTransformation::bfFuns, and BackflowTransformation::isOptimizable().

Referenced by BackflowTransformation::resetParametersExclusive(), BackflowTransformation::testDeriv(), DiracDeterminantWithBackflow::testDerivFjj(), and DiracDeterminantWithBackflow::testDerivLi().

127 {
128  //reset each unique basis functions
129  for (int i = 0; i < bfFuns.size(); i++)
130  if (bfFuns[i]->isOptimizable())
131  bfFuns[i]->resetParameters(active);
132 }
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns
void resetParameters(const opt_variables_type &active)

◆ resetParametersExclusive()

void resetParametersExclusive ( const opt_variables_type active)
inlinefinalvirtual

reset the parameters during optimizations.

Exclusive, see checkInVariablesExclusive

Implements OptimizableObject.

Definition at line 169 of file BackflowTransformation.h.

References BackflowTransformation::resetParameters().

169 { resetParameters(active); }
void resetParameters(const opt_variables_type &active)

◆ restore()

void restore ( int  iat = 0)

Definition at line 93 of file BackflowTransformation.cpp.

References BackflowTransformation::bfFuns, BackflowTransformation::indexQP, and BackflowTransformation::UpdateMode.

Referenced by BackflowTransformation::evaluatePbyP(), BackflowTransformation::evaluatePbyPAll(), and BackflowTransformation::evaluatePbyPWithGrad().

94 {
95  indexQP.clear();
96  for (int i = 0; i < bfFuns.size(); i++)
97  bfFuns[i]->restore(iat, UpdateMode);
98 }
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns
std::vector< int > indexQP
store index of qp coordinates that changed during pbyp move

◆ testDeriv()

void testDeriv ( const ParticleSet P)

Definition at line 402 of file BackflowTransformation.cpp.

References qmcplusplus::abs(), BackflowTransformation::Amat, qmcplusplus::app_log(), BackflowTransformation::bfFuns, BackflowTransformation::Bmat, BackflowTransformation::Bmat_full, BackflowTransformation::checkInVariables(), BackflowTransformation::checkOutVariables(), BackflowTransformation::Cmat, Array< T, D, ALLOC >::data(), BackflowTransformation::evaluate(), OMPstd::fill_n(), qmcplusplus::for(), BackflowTransformation::numParams, BackflowTransformation::NumTargets, OHMMS_DIM, VariableSet::print(), BackflowTransformation::QP, ParticleSet::R, BackflowTransformation::resetParameters(), Array< T, D, ALLOC >::resize(), Matrix< T, Alloc >::resize(), Vector< T, Alloc >::resize(), Array< T, D, ALLOC >::size(), Matrix< T, Alloc >::size(), VariableSet::size(), BackflowTransformation::Xmat, and BackflowTransformation::Ymat.

403 {
404  if (Cmat.size() == 0)
405  // initialize in the first call
406  {
410  }
411  Bmat = 0.0;
412  Amat = 0.0;
413  Bmat_full = 0.0;
414  Cmat = 0.0;
415  Ymat = 0.0;
416  std::fill_n(Xmat.data(), Xmat.size(), 0);
417  for (int i = 0; i < NumTargets; i++)
418  {
419  QP.R[i] = P.R[i];
420  Amat(i, i).diagonal(1.0);
421  }
422  for (int i = 0; i < bfFuns.size(); i++)
423  bfFuns[i]->evaluateWithDerivatives(P, QP, Bmat_full, Amat, Cmat, Ymat, Xmat);
427  GradMatrix Bmat_full_1;
428  HessMatrix Amat_1;
429  GradMatrix Bmat_full_2;
430  HessMatrix Amat_2;
431  RealType dh = 0.00001;
432  qp_0.resize(NumTargets);
433  qp_1.resize(NumTargets);
434  qp_2.resize(NumTargets);
435  Bmat_full_1.resize(NumTargets, NumTargets);
436  Bmat_full_2.resize(NumTargets, NumTargets);
437  Amat_1.resize(NumTargets, NumTargets);
438  Amat_2.resize(NumTargets, NumTargets);
439  for (int i = 0; i < NumTargets; i++)
440  {
441  qp_0[i] = QP.R[i];
442  }
443  app_log() << " Testing derivatives of backflow transformation. \n";
444  app_log() << " Numtargets: " << NumTargets << std::endl;
445  opt_variables_type wfVars, wfvar_prime;
446  checkInVariables(wfVars);
447  checkOutVariables(wfVars);
448  int Nvars = wfVars.size();
449  wfvar_prime = wfVars;
450  wfVars.print(std::cout);
451  for (int i = 0; i < Nvars; i++)
452  {
453  for (int j = 0; j < Nvars; j++)
454  wfvar_prime[j] = wfVars[j];
455  wfvar_prime[i] = wfVars[i] + dh;
456  resetParameters(wfvar_prime);
457  Bmat_full_1 = 0.0;
458  Amat_1 = 0.0;
459  for (int k = 0; k < NumTargets; k++)
460  {
461  QP.R[k] = P.R[k];
462  Amat_1(k, k).diagonal(1.0);
463  }
464  for (int k = 0; k < bfFuns.size(); k++)
465  bfFuns[k]->evaluate(P, QP, Bmat_full_1, Amat_1);
466  for (int k = 0; k < NumTargets; k++)
467  qp_1[k] = QP.R[k];
468  for (int j = 0; j < Nvars; j++)
469  wfvar_prime[j] = wfVars[j];
470  wfvar_prime[i] = wfVars[i] - dh;
471  resetParameters(wfvar_prime);
472  Bmat_full_2 = 0.0;
473  Amat_2 = 0.0;
474  for (int k = 0; k < NumTargets; k++)
475  {
476  QP.R[k] = P.R[k];
477  Amat_2(k, k).diagonal(1.0);
478  }
479  for (int k = 0; k < bfFuns.size(); k++)
480  bfFuns[k]->evaluate(P, QP, Bmat_full_2, Amat_2);
481  for (int k = 0; k < NumTargets; k++)
482  qp_2[k] = QP.R[k];
483  app_log() << "Cmat: \n"
484  << "i, AvDiff, max: \n";
485  //2011-07-17: what is the proper data type?
486  RealType df, av = 0.0, cnt = 0.0;
487  RealType maxD = -100.0;
488  const RealType ConstOne(1.0);
489  for (int k = 0; k < NumTargets; k++)
490  {
491  for (int q = 0; q < OHMMS_DIM; q++)
492  {
493  cnt += ConstOne;
494  df = (((qp_1[k])[q] - (qp_2[k])[q]) / (2.0 * dh) - Cmat(i, k)[q]);
495  av += df;
496  if (std::abs(df) > maxD)
497  maxD = std::abs(df);
498  //app_log() <<k <<" " <<q <<" "
499  // <<( (qp_1[k])[q] - (qp_2[k])[0] )/(2.0*dh) <<" "
500  // <<Cmat(i,k)[q] <<" " <<(( (qp_1[k])[q] - (qp_2[k])[q] )/(2.0*dh)-Cmat(i,k)[q]) << std::endl;
501  }
502  }
503  app_log() << i << " " << av / cnt << " " << maxD << std::endl;
504  av = cnt = maxD = 0.0;
505  app_log() << "Ymat: \n";
506  for (int k = 0; k < NumTargets; k++)
507  {
508  for (int q = 0; q < 3; q++)
509  {
510  RealType dB = 0.0;
511  for (int j = 0; j < NumTargets; j++)
512  dB += (Bmat_full_1(j, k)[q] - Bmat_full_2(j, k)[q]);
513  cnt += ConstOne;
514  df = (dB / (2.0 * dh) - Ymat(i, k)[q]);
515  av += df;
516  if (std::abs(df) > maxD)
517  maxD = std::abs(df);
518  //app_log() <<k <<" " <<q <<" "
519  // <<dB/(2.0*dh) <<" "
520  // <<Ymat(i,k)[q] <<" " <<(dB/(2.0*dh)-Ymat(i,k)[q]) << std::endl;
521  }
522  }
523  app_log() << i << " " << av / cnt << " " << maxD << std::endl;
524  av = cnt = maxD = 0.0;
525  app_log() << "Xmat: \n";
526  for (int k1 = 0; k1 < NumTargets; k1++)
527  for (int k2 = 0; k2 < NumTargets; k2++)
528  {
529  for (int q1 = 0; q1 < 3; q1++)
530  {
531  for (int q2 = 0; q2 < 3; q2++)
532  {
533  RealType dB = (Amat_1(k1, k2))(q1, q2) - (Amat_2(k1, k2))(q1, q2);
534  cnt += ConstOne;
535  df = (dB / (2.0 * dh) - (Xmat(i, k1, k2))(q1, q2));
536  av += df;
537  if (std::abs(df) > maxD)
538  maxD = std::abs(df);
539  //app_log() <<k1 <<" " <<k2 <<" " <<q1 <<" " <<q2 <<" "
540  // <<(Xmat(i,k1,k2))(q1,q2) <<" " <<(dB/(2.0*dh)-(Xmat(i,k1,k2))(q1,q2)) << std::endl;
541  }
542  }
543  }
544  app_log() << i << " " << av / cnt << " " << maxD << std::endl;
545  av = cnt = maxD = 0.0;
546  }
547 }
MakeReturn< UnaryNode< FnFabs, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t abs(const Vector< T1, C1 > &l)
void fill_n(T *x, size_t count, const T &value)
Definition: OMPstd.hpp:21
std::ostream & app_log()
Definition: OutputManager.h:65
Type_t * data()
Definition: OhmmsArray.h:87
void resize(size_type n, size_type m)
Resize the container.
Definition: OhmmsMatrix.h:99
void resize(const std::array< SIZET, D > &dims)
Resize the container.
Definition: OhmmsArray.h:65
#define OHMMS_DIM
Definition: config.h:64
for(int i=0;i< size_test;++i) CHECK(Approx(gauss_random_vals[offset_for_rs+i])
size_type size() const
Definition: OhmmsMatrix.h:76
void checkOutVariables(const opt_variables_type &active)
size_t size() const
Definition: OhmmsArray.h:57
ParticlePos R
Position.
Definition: ParticleSet.h:79
optimize::VariableSet opt_variables_type
void checkInVariables(opt_variables_type &active)
QMCTraits::RealType RealType
int NumTargets
number of quantum particles
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns
void resetParameters(const opt_variables_type &active)
void evaluate(const ParticleSet &P)
calculate quasi-particle coordinates, Bmat and Amat
ParticleAttrib< SingleParticlePos > ParticlePos
Definition: Configuration.h:92
ParticleSet QP
quasiparticle coordinates

◆ testPbyP()

void testPbyP ( ParticleSet P)

Definition at line 549 of file BackflowTransformation.cpp.

References BackflowTransformation::acceptMove(), ParticleSet::acceptMove(), BackflowTransformation::Amat, APP_ABORT, qmcplusplus::app_log(), PooledMemory< T_scalar, Alloc >::current(), BackflowTransformation::cutOff, qmcplusplus::Dot(), BackflowTransformation::evaluate(), BackflowTransformation::evaluatePbyPWithGrad(), ParticleSet::getDistTableAA(), BackflowTransformation::indexQP, ParticleSet::makeMove(), BackflowTransformation::myTableIndex_, BackflowTransformation::NumTargets, OHMMS_DIM, BackflowTransformation::QP, ParticleSet::R, BackflowTransformation::registerData(), Matrix< T, Alloc >::resize(), Vector< T, Alloc >::resize(), PooledMemory< T_scalar, Alloc >::rewind(), ParticleSet::update(), and BackflowTransformation::updateBuffer().

550 {
551  GradMatrix Bmat_full_0;
552  HessMatrix Amat_0;
553  GradMatrix Bmat_full_1;
554  HessMatrix Amat_1;
557  ParticleSet::ParticlePos qp_2, qp_3;
558  qp_0.resize(NumTargets);
559  qp_1.resize(NumTargets);
560  qp_2.resize(NumTargets);
561  qp_3.resize(NumTargets);
562  Bmat_full_0.resize(NumTargets, NumTargets);
563  Bmat_full_1.resize(NumTargets, NumTargets);
564  Amat_0.resize(NumTargets, NumTargets);
565  Amat_1.resize(NumTargets, NumTargets);
566  P.update();
567  WFBufferType tbuffer;
568  size_t BufferCursor = tbuffer.current();
569  registerData(P, tbuffer);
570  tbuffer.rewind(BufferCursor);
571  updateBuffer(P, tbuffer, true);
572  qp_3 = P.R;
573  evaluate(P);
574  qp_2 = QP.R;
575  app_log() << "after 1st eval: " << cutOff << std::endl;
576  for (int jat = 0; jat < NumTargets; jat++)
577  app_log() << jat << " " << P.R[jat] - QP.R[jat] << std::endl;
578  //for(int iat=0; iat<NumTargets; iat++) {
579  for (int iat = 0; iat < 1; iat++)
580  {
581  PosType dr;
582  dr[0] = 0.1;
583  dr[1] = 0.05;
584  dr[2] = -0.3;
585  P.makeMove(iat, dr);
586  const auto& myTable = P.getDistTableAA(myTableIndex_);
587 
588  //app_log() << "Move: " << myTable.Temp[iat].dr1 << std::endl;
589  //app_log() << "cutOff: " << cutOff << std::endl;
590  //for (int jat = 0; jat < NumTargets; jat++)
591  // app_log() << jat << " " << myTable.Temp[jat].r1 << std::endl;
592 
593  //evaluatePbyP(P,iat);
594  evaluatePbyPWithGrad(P, iat);
595  app_log() << "Moving: ";
596  for (int i = 0; i < indexQP.size(); i++)
597  app_log() << indexQP[i] << " ";
598  app_log() << std::endl;
599  acceptMove(P, iat);
600  P.acceptMove(iat);
601  }
602  qp_0 = QP.R;
603  Amat_0 = Amat;
604  tbuffer.rewind(BufferCursor);
605  updateBuffer(P, tbuffer, false);
606  P.update();
607  evaluate(P);
608  Amat_1 = Amat_0 - Amat;
609  qp_1 = QP.R - qp_0;
610  RealType qpdiff = Dot(qp_1, qp_1);
611  RealType Amdiff = 0.0;
612  for (int i = 0; i < NumTargets; i++)
613  for (int k = 0; k < NumTargets; k++)
614  for (int j = 0; j < OHMMS_DIM * OHMMS_DIM; j++)
615  Amdiff += Amat_1(i, k)[j] * Amat_1(i, k)[j];
616  app_log() << "Error in pbyp QP transformation: " << qpdiff << std::endl;
617  app_log() << "Error in pbyp QP Amat: " << Amdiff << std::endl;
618  app_log() << "i, diff, newPbyP, newEval: \n";
619  for (int i = 0; i < NumTargets; i++)
620  app_log() << i << "\n" << qp_0[i] - QP.R[i] << "\n" << qp_0[i] << "\n" << QP.R[i] << std::endl << std::endl;
621  APP_ABORT("Finished BackflowTransformation::testPbyP() \n.");
622 }
std::ostream & app_log()
Definition: OutputManager.h:65
BackflowFunctionBase::WFBufferType WFBufferType
void updateBuffer(ParticleSet &P, WFBufferType &buf, bool redo)
void registerData(ParticleSet &P, WFBufferType &buf)
#define OHMMS_DIM
Definition: config.h:64
T Dot(const ParticleAttrib< TinyVector< T, D >> &pa, const ParticleAttrib< TinyVector< T, D >> &pb)
QMCTraits::PosType PosType
ParticlePos R
Position.
Definition: ParticleSet.h:79
#define APP_ABORT(msg)
Widely used but deprecated fatal error macros from legacy code.
Definition: AppAbort.h:27
size_type current() const
Definition: PooledMemory.h:76
QMCTraits::RealType RealType
int NumTargets
number of quantum particles
void evaluate(const ParticleSet &P)
calculate quasi-particle coordinates, Bmat and Amat
ParticleAttrib< SingleParticlePos > ParticlePos
Definition: Configuration.h:92
void acceptMove(const ParticleSet &P, int iat)
void evaluatePbyPWithGrad(const ParticleSet &P, int iat)
calculate new quasi-particle coordinates after pbyp move
ParticleSet QP
quasiparticle coordinates
std::vector< int > indexQP
store index of qp coordinates that changed during pbyp move

◆ transformOnly()

void transformOnly ( const ParticleSet P)

calculate quasi-particle coordinates only

Definition at line 189 of file BackflowTransformation.cpp.

References BackflowTransformation::bfFuns, BackflowTransformation::evaluate(), qmcplusplus::for(), BackflowTransformation::NumTargets, BackflowTransformation::QP, ParticleSet::R, and ParticleSet::update().

190 {
191  for (int i = 0; i < NumTargets; i++)
192  QP.R[i] = P.R[i];
193  for (int i = 0; i < bfFuns.size(); i++)
194  bfFuns[i]->evaluate(P, QP);
195  QP.update(0); // update distance tables
196 }
void update(bool skipSK=false)
update the internal data
for(int i=0;i< size_test;++i) CHECK(Approx(gauss_random_vals[offset_for_rs+i])
ParticlePos R
Position.
Definition: ParticleSet.h:79
int NumTargets
number of quantum particles
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns
void evaluate(const ParticleSet &P)
calculate quasi-particle coordinates, Bmat and Amat
ParticleSet QP
quasiparticle coordinates

◆ updateBuffer()

void updateBuffer ( ParticleSet P,
WFBufferType buf,
bool  redo 
)

Definition at line 162 of file BackflowTransformation.cpp.

References BackflowTransformation::bfFuns, BackflowTransformation::evaluate(), BackflowTransformation::FirstOfA, BackflowTransformation::FirstOfB, BackflowTransformation::FirstOfP, BackflowTransformation::LastOfA, BackflowTransformation::LastOfB, BackflowTransformation::LastOfP, BackflowTransformation::NumTargets, PooledMemory< T_scalar, Alloc >::put(), BackflowTransformation::QP, ParticleSet::R, and BackflowTransformation::storeQP.

Referenced by BackflowTransformation::testPbyP().

163 {
164  //if(redo) evaluate(P);
165  evaluate(P);
166  for (int i = 0; i < NumTargets; i++)
167  storeQP[i] = QP.R[i];
168  buf.put(FirstOfP, LastOfP);
169  buf.put(FirstOfA, LastOfA);
170  buf.put(FirstOfB, LastOfB);
171  for (int i = 0; i < bfFuns.size(); i++)
172  bfFuns[i]->updateBuffer(buf);
173 }
void updateBuffer(ParticleSet &P, WFBufferType &buf, bool redo)
ParticlePos R
Position.
Definition: ParticleSet.h:79
int NumTargets
number of quantum particles
std::vector< std::unique_ptr< BackflowFunctionBase > > bfFuns
void evaluate(const ParticleSet &P)
calculate quasi-particle coordinates, Bmat and Amat
ParticleSet QP
quasiparticle coordinates

Member Data Documentation

◆ activeParticle

int activeParticle

◆ Amat

◆ Amat_temp

◆ bfFuns

◆ Bmat

◆ Bmat_full

◆ Bmat_temp

◆ Cmat

◆ cutOff

◆ DummyHess

HessType DummyHess

◆ FirstOfA

◆ FirstOfA_temp

◆ FirstOfB

◆ FirstOfB_temp

◆ FirstOfP

◆ HESS_ID

HessType HESS_ID

◆ index

std::vector<int> index

Definition at line 141 of file BackflowTransformation.h.

◆ indexQP

◆ LastOfA

◆ LastOfA_temp

◆ LastOfB

◆ LastOfB_temp

◆ LastOfP

◆ myTableIndex_

◆ myVars

Definition at line 143 of file BackflowTransformation.h.

◆ names

std::vector<std::string> names

Definition at line 131 of file BackflowTransformation.h.

◆ newQP

◆ numParams

◆ NumTargets

◆ numVarBefore

◆ oldQP

◆ optIndexMap

◆ QP

◆ sources

std::map<std::string, int> sources

Definition at line 130 of file BackflowTransformation.h.

◆ storeQP

◆ UpdateMode

◆ Xmat

◆ Ymat


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