QMCPACK
Hdispatcher Class Reference

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

+ Collaboration diagram for Hdispatcher:

Public Types

using FullPrecRealType = QMCHamiltonian::FullPrecRealType
 

Public Member Functions

 Hdispatcher (bool use_batch)
 
std::vector< FullPrecRealTypeflex_evaluate (const RefVectorWithLeader< QMCHamiltonian > &ham_list, const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list) const
 
std::vector< FullPrecRealTypeflex_evaluateWithToperator (const RefVectorWithLeader< QMCHamiltonian > &ham_list, const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list) const
 
std::vector< int > flex_makeNonLocalMoves (const RefVectorWithLeader< QMCHamiltonian > &ham_list, const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list) const
 

Private Attributes

bool use_batch_
 

Detailed Description

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

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

Definition at line 24 of file Hdispatcher.h.

Member Typedef Documentation

◆ FullPrecRealType

Constructor & Destructor Documentation

◆ Hdispatcher()

Hdispatcher ( bool  use_batch)

Definition at line 19 of file Hdispatcher.cpp.

19 : use_batch_(use_batch) {}

Member Function Documentation

◆ flex_evaluate()

std::vector< QMCHamiltonian::FullPrecRealType > flex_evaluate ( const RefVectorWithLeader< QMCHamiltonian > &  ham_list,
const RefVectorWithLeader< TrialWaveFunction > &  wf_list,
const RefVectorWithLeader< ParticleSet > &  p_list 
) const

Definition at line 22 of file Hdispatcher.cpp.

References qmcplusplus::evaluate(), QMCHamiltonian::mw_evaluate(), and Hdispatcher::use_batch_.

26 {
27  assert(ham_list.size() == p_list.size());
28  if (use_batch_)
29  return QMCHamiltonian::mw_evaluate(ham_list, wf_list, p_list);
30  else
31  {
32  std::vector<FullPrecRealType> local_energies(ham_list.size());
33  for (size_t iw = 0; iw < ham_list.size(); iw++)
34  local_energies[iw] = ham_list[iw].evaluate(p_list[iw]);
35  return local_energies;
36  }
37 }
static std::vector< QMCHamiltonian::FullPrecRealType > mw_evaluate(const RefVectorWithLeader< QMCHamiltonian > &ham_list, const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list)
batched version of evaluate for LocalEnergy
void evaluate(Matrix< T, Alloc > &lhs, const Op &op, const Expression< RHS > &rhs)
Definition: OhmmsMatrix.h:514

◆ flex_evaluateWithToperator()

std::vector< QMCHamiltonian::FullPrecRealType > flex_evaluateWithToperator ( const RefVectorWithLeader< QMCHamiltonian > &  ham_list,
const RefVectorWithLeader< TrialWaveFunction > &  wf_list,
const RefVectorWithLeader< ParticleSet > &  p_list 
) const

Definition at line 39 of file Hdispatcher.cpp.

References QMCHamiltonian::mw_evaluateWithToperator(), and Hdispatcher::use_batch_.

43 {
44  assert(ham_list.size() == p_list.size());
45  if (use_batch_)
46  return QMCHamiltonian::mw_evaluateWithToperator(ham_list, wf_list, p_list);
47  else
48  {
49  std::vector<FullPrecRealType> local_energies(ham_list.size());
50  for (size_t iw = 0; iw < ham_list.size(); iw++)
51  local_energies[iw] = ham_list[iw].evaluateWithToperator(p_list[iw]);
52  return local_energies;
53  }
54 }
static std::vector< QMCHamiltonian::FullPrecRealType > mw_evaluateWithToperator(const RefVectorWithLeader< QMCHamiltonian > &ham_list, const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list)
batched version of evaluate Local energy with Toperators updated.

◆ flex_makeNonLocalMoves()

std::vector< int > flex_makeNonLocalMoves ( const RefVectorWithLeader< QMCHamiltonian > &  ham_list,
const RefVectorWithLeader< TrialWaveFunction > &  wf_list,
const RefVectorWithLeader< ParticleSet > &  p_list 
) const

Definition at line 56 of file Hdispatcher.cpp.

References QMCHamiltonian::mw_makeNonLocalMoves(), and Hdispatcher::use_batch_.

59 {
60  assert(ham_list.size() == p_list.size());
61  if (use_batch_)
62  return QMCHamiltonian::mw_makeNonLocalMoves(ham_list, wf_list, p_list);
63  else
64  {
65  std::vector<int> num_accepts(ham_list.size());
66  for (size_t iw = 0; iw < ham_list.size(); iw++)
67  num_accepts[iw] = ham_list[iw].makeNonLocalMoves(p_list[iw]);
68  return num_accepts;
69  }
70 }
static std::vector< int > mw_makeNonLocalMoves(const RefVectorWithLeader< QMCHamiltonian > &ham_list, const RefVectorWithLeader< TrialWaveFunction > &wf_list, const RefVectorWithLeader< ParticleSet > &p_list)

Member Data Documentation

◆ use_batch_


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