QMCPACK
TWFdispatcher Class Reference

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

+ Collaboration diagram for TWFdispatcher:

Public Types

using PsiValue = TrialWaveFunction::PsiValue
 
using ComputeType = TrialWaveFunction::ComputeType
 
using ValueType = TrialWaveFunction::ValueType
 
using GradType = TrialWaveFunction::GradType
 
using Complex = TrialWaveFunction::ComplexType
 

Public Member Functions

 TWFdispatcher (bool use_batch)
 
void flex_evaluateLog (const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list) const
 
void flex_recompute (const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list, const std::vector< bool > &recompute) const
 
void flex_calcRatio (const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list, int iat, std::vector< PsiValue > &ratios, ComputeType ct=ComputeType::ALL) const
 
void flex_prepareGroup (const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list, int ig) const
 
template<CoordsType CT>
void flex_evalGrad (const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list, int iat, TWFGrads< CT > &grads) const
 
template<CoordsType CT>
void flex_calcRatioGrad (const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list, int iat, std::vector< PsiValue > &ratios, TWFGrads< CT > &grads) const
 
void flex_accept_rejectMove (const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list, int iat, const std::vector< bool > &isAccepted, bool safe_to_delay) const
 
void flex_completeUpdates (const RefVectorWithLeader< TrialWaveFunction > &wf_list) const
 
void flex_evaluateGL (const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list, bool fromscratch) const
 
void flex_evaluateRatios (const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< const VirtualParticleSet > &vp_list, const RefVector< std::vector< ValueType >> &ratios_list, ComputeType ct) const
 

Private Attributes

bool use_batch_
 

Detailed Description

Wrappers for dispatching to TrialWaveFunction 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 25 of file TWFdispatcher.h.

Member Typedef Documentation

◆ Complex

Definition at line 32 of file TWFdispatcher.h.

◆ ComputeType

Definition at line 29 of file TWFdispatcher.h.

◆ GradType

Definition at line 31 of file TWFdispatcher.h.

◆ PsiValue

Definition at line 28 of file TWFdispatcher.h.

◆ ValueType

Definition at line 30 of file TWFdispatcher.h.

Constructor & Destructor Documentation

◆ TWFdispatcher()

TWFdispatcher ( bool  use_batch)

Definition at line 19 of file TWFdispatcher.cpp.

19 : use_batch_(use_batch) {}

Member Function Documentation

◆ flex_accept_rejectMove()

void flex_accept_rejectMove ( const RefVectorWithLeader< TrialWaveFunction > &  wf_list,
const RefVectorWithLeader< ParticleSet > &  p_list,
int  iat,
const std::vector< bool > &  isAccepted,
bool  safe_to_delay 
) const

Definition at line 120 of file TWFdispatcher.cpp.

References TrialWaveFunction::mw_accept_rejectMove(), and TWFdispatcher::use_batch_.

125 {
126  assert(wf_list.size() == p_list.size());
127  if (use_batch_)
128  TrialWaveFunction::mw_accept_rejectMove(wf_list, p_list, iat, isAccepted, safe_to_delay);
129  else
130  for (size_t iw = 0; iw < wf_list.size(); iw++)
131  if (isAccepted[iw])
132  wf_list[iw].acceptMove(p_list[iw], iat, safe_to_delay);
133  else
134  wf_list[iw].rejectMove(iat);
135 }
static void mw_accept_rejectMove(const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list, int iat, const std::vector< bool > &isAccepted, bool safe_to_delay=false)

◆ flex_calcRatio()

void flex_calcRatio ( const RefVectorWithLeader< TrialWaveFunction > &  wf_list,
const RefVectorWithLeader< ParticleSet > &  p_list,
int  iat,
std::vector< PsiValue > &  ratios,
ComputeType  ct = ComputeType::ALL 
) const

Definition at line 45 of file TWFdispatcher.cpp.

References TrialWaveFunction::mw_calcRatio(), and TWFdispatcher::use_batch_.

50 {
51  assert(wf_list.size() == p_list.size());
52  if (use_batch_)
53  TrialWaveFunction::mw_calcRatio(wf_list, p_list, iat, ratios, ct);
54  else
55  {
56  const int num_wf = wf_list.size();
57  ratios.resize(num_wf);
58  for (size_t iw = 0; iw < num_wf; iw++)
59  ratios[iw] = wf_list[iw].calcRatio(p_list[iw], iat, ct);
60  }
61 }
static void mw_calcRatio(const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list, int iat, std::vector< PsiValue > &ratios, ComputeType ct=ComputeType::ALL)
batched version of calcRatio

◆ flex_calcRatioGrad()

void flex_calcRatioGrad ( const RefVectorWithLeader< TrialWaveFunction > &  wf_list,
const RefVectorWithLeader< ParticleSet > &  p_list,
int  iat,
std::vector< PsiValue > &  ratios,
TWFGrads< CT > &  grads 
) const

Definition at line 97 of file TWFdispatcher.cpp.

References TrialWaveFunction::mw_calcRatioGrad(), qmcplusplus::POS_SPIN, and TWFdispatcher::use_batch_.

102 {
103  assert(wf_list.size() == p_list.size());
104  if (use_batch_)
105  TrialWaveFunction::mw_calcRatioGrad(wf_list, p_list, iat, ratios, grads);
106  else
107  {
108  const int num_wf = wf_list.size();
109  ratios.resize(num_wf);
110  assert(wf_list.size() == grads.grads_positions.size());
111  for (size_t iw = 0; iw < num_wf; iw++)
112  if constexpr (CT == CoordsType::POS_SPIN)
113  ratios[iw] =
114  wf_list[iw].calcRatioGradWithSpin(p_list[iw], iat, grads.grads_positions[iw], grads.grads_spins[iw]);
115  else
116  ratios[iw] = wf_list[iw].calcRatioGrad(p_list[iw], iat, grads.grads_positions[iw]);
117  }
118 }
static void mw_calcRatioGrad(const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list, int iat, std::vector< PsiValue > &ratios, TWFGrads< CT > &grads)
batched version of ratioGrad

◆ flex_completeUpdates()

void flex_completeUpdates ( const RefVectorWithLeader< TrialWaveFunction > &  wf_list) const

Definition at line 137 of file TWFdispatcher.cpp.

References TrialWaveFunction::mw_completeUpdates(), and TWFdispatcher::use_batch_.

138 {
139  if (use_batch_)
141  else
142  for (TrialWaveFunction& wf : wf_list)
143  wf.completeUpdates();
144 }
static void mw_completeUpdates(const RefVectorWithLeader< TrialWaveFunction > &wf_list)

◆ flex_evalGrad()

void flex_evalGrad ( const RefVectorWithLeader< TrialWaveFunction > &  wf_list,
const RefVectorWithLeader< ParticleSet > &  p_list,
int  iat,
TWFGrads< CT > &  grads 
) const

Definition at line 76 of file TWFdispatcher.cpp.

References TrialWaveFunction::mw_evalGrad(), qmcplusplus::POS_SPIN, and TWFdispatcher::use_batch_.

80 {
81  assert(wf_list.size() == p_list.size());
82  if (use_batch_)
83  TrialWaveFunction::mw_evalGrad(wf_list, p_list, iat, grads);
84  else
85  {
86  const int num_wf = wf_list.size();
87  assert(grads.grads_positions.size() == wf_list.size());
88  for (size_t iw = 0; iw < num_wf; iw++)
89  if constexpr (CT == CoordsType::POS_SPIN)
90  grads.grads_positions[iw] = wf_list[iw].evalGradWithSpin(p_list[iw], iat, grads.grads_spins[iw]);
91  else
92  grads.grads_positions[iw] = wf_list[iw].evalGrad(p_list[iw], iat);
93  }
94 }
static void mw_evalGrad(const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list, int iat, TWFGrads< CT > &grads)
batched version of evalGrad

◆ flex_evaluateGL()

void flex_evaluateGL ( const RefVectorWithLeader< TrialWaveFunction > &  wf_list,
const RefVectorWithLeader< ParticleSet > &  p_list,
bool  fromscratch 
) const

Definition at line 146 of file TWFdispatcher.cpp.

References TrialWaveFunction::mw_evaluateGL(), and TWFdispatcher::use_batch_.

149 {
150  assert(wf_list.size() == p_list.size());
151  if (use_batch_)
152  TrialWaveFunction::mw_evaluateGL(wf_list, p_list, fromscratch);
153  else
154  for (size_t iw = 0; iw < wf_list.size(); iw++)
155  wf_list[iw].evaluateGL(p_list[iw], fromscratch);
156 }
static void mw_evaluateGL(const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list, bool fromscratch)

◆ flex_evaluateLog()

void flex_evaluateLog ( const RefVectorWithLeader< TrialWaveFunction > &  wf_list,
const RefVectorWithLeader< ParticleSet > &  p_list 
) const

Definition at line 21 of file TWFdispatcher.cpp.

References TrialWaveFunction::mw_evaluateLog(), and TWFdispatcher::use_batch_.

23 {
24  assert(wf_list.size() == p_list.size());
25  if (use_batch_)
26  TrialWaveFunction::mw_evaluateLog(wf_list, p_list);
27  else
28  for (size_t iw = 0; iw < wf_list.size(); iw++)
29  wf_list[iw].evaluateLog(p_list[iw]);
30 }
static void mw_evaluateLog(const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list)
batched version of evaluateLog.

◆ flex_evaluateRatios()

void flex_evaluateRatios ( const RefVectorWithLeader< TrialWaveFunction > &  wf_list,
const RefVectorWithLeader< const VirtualParticleSet > &  vp_list,
const RefVector< std::vector< ValueType >> &  ratios_list,
ComputeType  ct 
) const

Definition at line 158 of file TWFdispatcher.cpp.

References TrialWaveFunction::mw_evaluateRatios(), and TWFdispatcher::use_batch_.

162 {
163  assert(wf_list.size() == vp_list.size());
164  assert(wf_list.size() == ratios_list.size());
165  if (use_batch_)
166  TrialWaveFunction::mw_evaluateRatios(wf_list, vp_list, ratios_list, ct);
167  else
168  for (size_t iw = 0; iw < wf_list.size(); iw++)
169  wf_list[iw].evaluateRatios(vp_list[iw], ratios_list[iw], ct);
170 }
static void mw_evaluateRatios(const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< const VirtualParticleSet > &Vp_list, const RefVector< std::vector< ValueType >> &ratios_list, ComputeType ct=ComputeType::ALL)
batched version of evaluateRatios Note: unlike other mw_ static functions, *this is the batch leader ...

◆ flex_prepareGroup()

void flex_prepareGroup ( const RefVectorWithLeader< TrialWaveFunction > &  wf_list,
const RefVectorWithLeader< ParticleSet > &  p_list,
int  ig 
) const

Definition at line 63 of file TWFdispatcher.cpp.

References TrialWaveFunction::mw_prepareGroup(), and TWFdispatcher::use_batch_.

66 {
67  assert(wf_list.size() == p_list.size());
68  if (use_batch_)
69  TrialWaveFunction::mw_prepareGroup(wf_list, p_list, ig);
70  else
71  for (size_t iw = 0; iw < wf_list.size(); iw++)
72  wf_list[iw].prepareGroup(p_list[iw], ig);
73 }
static void mw_prepareGroup(const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list, int ig)
batched version of prepareGroup

◆ flex_recompute()

void flex_recompute ( const RefVectorWithLeader< TrialWaveFunction > &  wf_list,
const RefVectorWithLeader< ParticleSet > &  p_list,
const std::vector< bool > &  recompute 
) const

Definition at line 32 of file TWFdispatcher.cpp.

References TrialWaveFunction::mw_recompute(), and TWFdispatcher::use_batch_.

35 {
36  assert(wf_list.size() == p_list.size());
37  if (use_batch_)
38  TrialWaveFunction::mw_recompute(wf_list, p_list, recompute);
39  else
40  for (size_t iw = 0; iw < wf_list.size(); iw++)
41  if (recompute[iw])
42  wf_list[iw].recompute(p_list[iw]);
43 }
static void mw_recompute(const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list, const std::vector< bool > &recompute)
batched version of recompute

Member Data Documentation

◆ use_batch_


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