QMCPACK
Crowd.h
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) 2022 QMCPACK developers.
6 //
7 // File developed by: Peter Doak, doakpw@ornl.gov, Oak Ridge National Laboratory
8 //////////////////////////////////////////////////////////////////////////////////////
9 
10 #ifndef QMCPLUSPLUS_CROWD_H
11 #define QMCPLUSPLUS_CROWD_H
12 
13 #include <vector>
15 #include "RandomGenerator.h"
16 #include "MultiWalkerDispatchers.h"
17 #include "DriverWalkerTypes.h"
19 #include "WalkerLogCollector.h"
20 
21 namespace qmcplusplus
22 {
23 // forward declaration
24 class ResourceCollection;
25 class EstimatorManagerNew;
26 class WalkerLogCollector;
27 
28 /** Driver synchronized step context
29  *
30  * assumed to live inside the drivers scope
31  * Represents the walker contexts exlusively operated on by
32  * one concurrent "worker" context from a total population
33  * owned by a MCPopulation
34  *
35  * TODO: Maybe construct and initialize in thread execution space
36  * @ye doubts this is important if rank is confined to one NUMA
37  */
38 class Crowd
39 {
40 public:
45  /** The constructor
46  * this requires all the gold elements because it constructs a valid estimator_manager_crowd
47  * and valid mw resources for the crowd. We do not want this to be a multistep process.
48  * To do this requires temporary walker elements. You need them all because you need to aquire
49  * the crowd scope mw QMCHamiltonian resource.
50  * The Crowd retains none of these references only the now valid mw resource.
51  * Reduce coupling between walker elements fewer could be necessary.
52  */
54  const DriverWalkerResourceCollection& driverwalker_res,
55  const ParticleSet& pset,
56  const TrialWaveFunction& twf,
57  const QMCHamiltonian& hamiltonian_temp,
58  const MultiWalkerDispatchers& dispatchers);
59  ~Crowd();
60  /** Because so many vectors allocate them upfront.
61  *
62  * could be premature optimization
63  */
64  void reserve(int crowd_size);
65  void startRun() {}
66  void startBlock(int steps);
67  void stopBlock();
68 
71 
72  /** Clears all walker vectors
73  *
74  * Unless you are _redistributing_ walkers to crowds don't
75  * call this. Prefer allowing the crowd lifecycle to roll.
76  * DO NOT move constructor code into here and call from constructor
77  * That is legacy "reset" pattern is considered deprecated
78  */
79  void clearWalkers();
80 
82  {
83  if (this->size() == 0)
84  return;
86  }
87 
88  /// activate the collector
89  void setWalkerLogCollector(std::unique_ptr<WalkerLogCollector>&&);
90  /// Collect walker log data
91  void collectStepWalkerLog(int current_step);
92 
94 
95  auto beginWalkers() { return mcp_walkers_.begin(); }
96  auto endWalkers() { return mcp_walkers_.end(); }
97  auto beginTrialWaveFunctions() { return walker_twfs_.begin(); }
98  auto endTrialWaveFunctions() { return walker_twfs_.end(); }
99  auto beginElectrons() { return walker_elecs_.begin(); }
100  auto endElectrons() { return walker_elecs_.end(); }
101 
102  const RefVector<MCPWalker>& get_walkers() const { return mcp_walkers_; }
106 
108 
110 
111  int size() const { return mcp_walkers_.size(); }
112 
113  void incReject() { ++n_reject_; }
114  void incAccept() { ++n_accept_; }
115  void incNonlocalAccept(int n = 1) { n_nonlocal_accept_ += n; }
116  unsigned long get_nonlocal_accept() { return n_nonlocal_accept_; }
117  unsigned long get_accept() { return n_accept_; }
118  unsigned long get_reject() { return n_reject_; }
119 
121 
122  /// get refereces of active walker log collectors. If walker logging is disabled, the RefVector size can be zero.
124 
125 private:
126  /** @name Walker Vectors
127  *
128  * A single index into these ordered lists constitutes a complete
129  * walker context.
130  * @{
131  */
136  /** }@ */
137 
138  // provides multi walker resource
140  /// per crowd estimator manager
142  // collector for walker logs
143  std::unique_ptr<WalkerLogCollector> wlog_collector_;
144 
145  /** @name Step State
146  *
147  * Should be per walker?
148  * @{
149  */
150  unsigned long n_reject_ = 0;
151  unsigned long n_accept_ = 0;
152  unsigned long n_nonlocal_accept_ = 0;
153  /** @} */
154 };
155 
156 } // namespace qmcplusplus
157 #endif
Fixed-size array.
Definition: OhmmsTinyMeta.h:30
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
QTBase::GradType GradType
Definition: Configuration.h:62
void incAccept()
Definition: Crowd.h:114
QTBase::RealType RealType
Definition: Configuration.h:58
auto beginTrialWaveFunctions()
Definition: Crowd.h:97
auto endTrialWaveFunctions()
Definition: Crowd.h:98
Class to manage a set of ScalarEstimators As a manager, this class handles the aggregation of data fr...
const RefVector< MCPWalker > & get_walkers() const
Definition: Crowd.h:102
Collection of Local Energy Operators.
void collectStepWalkerLog(int current_step)
Collect walker log data.
Definition: Crowd.cpp:96
QMCTraits::FullPrecRealType FullPrecRealType
Definition: Crowd.h:44
unsigned long n_reject_
Definition: Crowd.h:150
RefVector< MCPWalker > mcp_walkers_
Definition: Crowd.h:132
std::vector< std::unique_ptr< T > > UPtrVector
Driver synchronized step context.
Definition: Crowd.h:38
void reserve(int crowd_size)
Because so many vectors allocate them upfront.
Definition: Crowd.cpp:55
void addWalker(MCPWalker &walker, ParticleSet &elecs, TrialWaveFunction &twf, QMCHamiltonian &hamiltonian)
Definition: Crowd.cpp:64
EstimatorManagerCrowd estimator_manager_crowd_
per crowd estimator manager
Definition: Crowd.h:141
unsigned long get_accept()
Definition: Crowd.h:117
auto beginWalkers()
Definition: Crowd.h:95
int size() const
Definition: Crowd.h:111
Specialized paritlce class for atomistic simulations.
Definition: ParticleSet.h:55
void incNonlocalAccept(int n=1)
Definition: Crowd.h:115
const RefVector< TrialWaveFunction > & get_walker_twfs() const
Definition: Crowd.h:104
static RefVector< WalkerLogCollector > getWalkerLogCollectorRefs(const UPtrVector< Crowd > &crowds)
get refereces of active walker log collectors. If walker logging is disabled, the RefVector size can ...
Definition: Crowd.cpp:106
auto endWalkers()
Definition: Crowd.h:96
auto endElectrons()
Definition: Crowd.h:100
Thread local estimator container/accumulator.
void incReject()
Definition: Crowd.h:113
DriverWalker multi walker resource collections It currently supports VMC and DMC only.
void accumulate(RandomBase< FullPrecRealType > &rng)
Definition: Crowd.h:81
void stopBlock()
Definition: Crowd.cpp:89
void startBlock(int steps)
Definition: Crowd.cpp:78
std::vector< std::reference_wrapper< T > > RefVector
const RefVector< ParticleSet > & get_walker_elecs() const
Definition: Crowd.h:103
unsigned long get_reject()
Definition: Crowd.h:118
RefVector< TrialWaveFunction > walker_twfs_
Definition: Crowd.h:134
RefVector< ParticleSet > walker_elecs_
Definition: Crowd.h:133
auto beginElectrons()
Definition: Crowd.h:99
const RefVector< QMCHamiltonian > & get_walker_hamiltonians() const
Definition: Crowd.h:105
Class to represent a many-body trial wave function.
DriverWalkerResourceCollection driverwalker_resource_collection_
}@
Definition: Crowd.h:139
RefVector< QMCHamiltonian > walker_hamiltonians_
Definition: Crowd.h:135
void setRNGForHamiltonian(RandomBase< FullPrecRealType > &rng)
Definition: Crowd.cpp:72
QMCTraits::RealType RealType
Definition: Crowd.h:43
const EstimatorManagerCrowd & get_estimator_manager_crowd() const
Definition: Crowd.h:107
Driver level walker (DriverWalker) related data structures.
Walker< QMCTraits, PtclOnLatticeTraits > MCPWalker
Definition: MCPopulation.h:41
unsigned long n_accept_
Definition: Crowd.h:151
std::unique_ptr< WalkerLogCollector > wlog_collector_
Definition: Crowd.h:143
QTFull::RealType FullPrecRealType
Definition: Configuration.h:66
unsigned long get_nonlocal_accept()
Definition: Crowd.h:116
Crowd(EstimatorManagerNew &emb, const DriverWalkerResourceCollection &driverwalker_res, const ParticleSet &pset, const TrialWaveFunction &twf, const QMCHamiltonian &hamiltonian_temp, const MultiWalkerDispatchers &dispatchers)
The constructor this requires all the gold elements because it constructs a valid estimator_manager_c...
Definition: Crowd.cpp:16
EstimatorManagerCrowd & get_estimator_manager_crowd()
Definition: Crowd.h:69
Declare a global Random Number Generator.
A container class to represent a walker.
Definition: Walker.h:49
void clearWalkers()
Clears all walker vectors.
Definition: Crowd.cpp:46
const MultiWalkerDispatchers & dispatchers_
Definition: Crowd.h:120
DriverWalkerResourceCollection & getSharedResource()
Definition: Crowd.h:109
void accumulate(const RefVector< MCPWalker > &walkers, const RefVector< ParticleSet > &psets, const RefVector< TrialWaveFunction > &wfns, const RefVector< QMCHamiltonian > &hams, RandomBase< FullPrecRealType > &rng)
Accumulate over all scalar estimators and operator estimators over all walkers in crowd...
void setWalkerLogCollector(std::unique_ptr< WalkerLogCollector > &&)
activate the collector
Definition: Crowd.cpp:91
unsigned long n_nonlocal_accept_
Definition: Crowd.h:152
void startRun()
Definition: Crowd.h:65