QMCPACK
PSdispatcher Class Reference

Wrappers for dispatching to ParticleSet single walker APIs or mw_ APIs. More...

+ Collaboration diagram for PSdispatcher:

Public Types

using Walker_t = ParticleSet::Walker_t
 
using SingleParticlePos = ParticleSet::SingleParticlePos
 
using Scalar_t = ParticleSet::Scalar_t
 

Public Member Functions

 PSdispatcher (bool use_batch)
 
void flex_loadWalker (const RefVectorWithLeader< ParticleSet > &p_list, const RefVector< Walker_t > &walkers, const std::vector< bool > &recompute, bool pbyp) const
 
void flex_update (const RefVectorWithLeader< ParticleSet > &p_list, bool skipSK=false) const
 
template<CoordsType CT>
void flex_makeMove (const RefVectorWithLeader< ParticleSet > &p_list, int iat, const MCCoords< CT > &displs) const
 
template<CoordsType CT>
void flex_accept_rejectMove (const RefVectorWithLeader< ParticleSet > &p_list, int iat, const std::vector< bool > &isAccepted, bool forward_mode=true) const
 
void flex_saveWalker (const RefVectorWithLeader< ParticleSet > &p_list, const RefVector< Walker_t > &walkers) const
 
void flex_donePbyP (const RefVectorWithLeader< ParticleSet > &p_list) const
 

Private Attributes

bool use_batch_
 

Detailed Description

Wrappers for dispatching to ParticleSet single walker APIs or mw_ APIs.

This should be only used by QMC drivers. member function names must match mw_ APIs in TrialWaveFunction

Definition at line 24 of file PSdispatcher.h.

Member Typedef Documentation

◆ Scalar_t

Definition at line 29 of file PSdispatcher.h.

◆ SingleParticlePos

◆ Walker_t

Definition at line 27 of file PSdispatcher.h.

Constructor & Destructor Documentation

◆ PSdispatcher()

PSdispatcher ( bool  use_batch)

Definition at line 17 of file PSdispatcher.cpp.

17 : use_batch_(use_batch) {}

Member Function Documentation

◆ flex_accept_rejectMove()

void flex_accept_rejectMove ( const RefVectorWithLeader< ParticleSet > &  p_list,
int  iat,
const std::vector< bool > &  isAccepted,
bool  forward_mode = true 
) const

Definition at line 61 of file PSdispatcher.cpp.

References PSdispatcher::use_batch_.

65 {
66  if (use_batch_)
67  ParticleSet::mw_accept_rejectMove<CT>(p_list, iat, isAccepted, forward_mode);
68  else
69  for (size_t iw = 0; iw < p_list.size(); iw++)
70  p_list[iw].accept_rejectMove(iat, isAccepted[iw], forward_mode);
71 }

◆ flex_donePbyP()

void flex_donePbyP ( const RefVectorWithLeader< ParticleSet > &  p_list) const

Definition at line 73 of file PSdispatcher.cpp.

References ParticleSet::mw_donePbyP(), qmcplusplus::pset, and PSdispatcher::use_batch_.

74 {
75  if (use_batch_)
77  else
78  for (ParticleSet& pset : p_list)
79  pset.donePbyP();
80 }
static void mw_donePbyP(const RefVectorWithLeader< ParticleSet > &p_list, bool skipSK=false)
batched version of donePbyP

◆ flex_loadWalker()

void flex_loadWalker ( const RefVectorWithLeader< ParticleSet > &  p_list,
const RefVector< Walker_t > &  walkers,
const std::vector< bool > &  recompute,
bool  pbyp 
) const

Definition at line 19 of file PSdispatcher.cpp.

References ParticleSet::mw_loadWalker(), PSdispatcher::use_batch_, and qmcplusplus::hdf::walkers.

23 {
24  if (use_batch_)
25  ParticleSet::mw_loadWalker(p_list, walkers, recompute, pbyp);
26  else
27  for (size_t iw = 0; iw < p_list.size(); iw++)
28  if (recompute[iw])
29  {
30  p_list[iw].loadWalker(walkers[iw], false);
31  // loadWalker and mw_loadWalker doesn't have the same behavior. Need the following update call.
32  p_list[iw].update(true);
33  }
34 }
const char walkers[]
Definition: HDFVersion.h:36
static void mw_loadWalker(const RefVectorWithLeader< ParticleSet > &p_list, const RefVector< Walker_t > &walkers, const std::vector< bool > &recompute, bool pbyp)
batched version of loadWalker

◆ flex_makeMove()

void flex_makeMove ( const RefVectorWithLeader< ParticleSet > &  p_list,
int  iat,
const MCCoords< CT > &  displs 
) const

Definition at line 46 of file PSdispatcher.cpp.

References ParticleSet::mw_makeMove(), qmcplusplus::POS_SPIN, and PSdispatcher::use_batch_.

49 {
50  if (use_batch_)
51  ParticleSet::mw_makeMove(p_list, iat, displs);
52  else
53  for (size_t iw = 0; iw < p_list.size(); iw++)
54  if constexpr (CT == CoordsType::POS_SPIN)
55  p_list[iw].makeMoveWithSpin(iat, displs.positions[iw], displs.spins[iw]);
56  else
57  p_list[iw].makeMove(iat, displs.positions[iw]);
58 }
static void mw_makeMove(const RefVectorWithLeader< ParticleSet > &p_list, int iat, const MCCoords< CT > &displs)
batched version of makeMove

◆ flex_saveWalker()

void flex_saveWalker ( const RefVectorWithLeader< ParticleSet > &  p_list,
const RefVector< Walker_t > &  walkers 
) const

Definition at line 82 of file PSdispatcher.cpp.

References ParticleSet::mw_saveWalker(), PSdispatcher::use_batch_, and qmcplusplus::hdf::walkers.

84 {
85  if (use_batch_)
87  else
88  for (size_t iw = 0; iw < p_list.size(); iw++)
89  p_list[iw].saveWalker(walkers[iw]);
90 }
const char walkers[]
Definition: HDFVersion.h:36
static void mw_saveWalker(const RefVectorWithLeader< ParticleSet > &psets, const RefVector< Walker_t > &walkers)
batched version of saveWalker

◆ flex_update()

void flex_update ( const RefVectorWithLeader< ParticleSet > &  p_list,
bool  skipSK = false 
) const

Definition at line 36 of file PSdispatcher.cpp.

References ParticleSet::mw_update(), qmcplusplus::pset, and PSdispatcher::use_batch_.

37 {
38  if (use_batch_)
39  ParticleSet::mw_update(p_list, skipSK);
40  else
41  for (ParticleSet& pset : p_list)
42  pset.update(skipSK);
43 }
static void mw_update(const RefVectorWithLeader< ParticleSet > &p_list, bool skipSK=false)
batched version of update

Member Data Documentation

◆ use_batch_


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